zoukankan      html  css  js  c++  java
  • MVC3控制器方法获取Form数据方法

    http://www.cnblogs.com/bianlan/archive/2013/01/12/2857310.html

    控制器方法获取View页面传送的数据有多种方法,以Edit方法为例:

    1、Form表单请求收集方式

    包括Request.Form或者FormCollection。

    如下:

    复制代码
     [HttpPost]
            public ActionResult Edit(FormCollection collection)
            {
                var album = new Album();
                if (ModelState.IsValid)
                {
                   // EntityState.Modified表示这条数据是修改的,已有的,而不是新建的
                    album.Title=collection["Title"];
                    album.Title = Request.Form["Title"];
                    db.Entry(album).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
                ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
                return View(album);
            }
    复制代码

    这样直接获取表单请求的数据,代码会变得冗长乏味。上面只是设置了两个属性,如果有10个或者更多个,写起来太累。而且任何不是字符串类型的属性还需要自己进行类型转换。

    注意:Request.Form["Title"],必须在页面的有可编辑标签的name值为”Title”,根据html标签的name值获取该标签的数据。

     

    2、 DefaultModelBinder

    通过View页面上的类型对象作为参数传递数据

    如Edit页面头部引用:@model MusicStore.Models.Album

    Edit方法代码如下:

    复制代码
    [HttpPost]
            public ActionResult Edit(Album album)
            {
                if (ModelState.IsValid)
                {
                    // EntityState.Modified表示这条数据是修改的,已有的,而不是新建的
                    db.Entry(album).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
                ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
                return View(album);
            }
    复制代码

     当操作带有一个参数时,MVC机制就会使用一个模型绑定器来构建这个参数对象。在Album对象的情形中,默认的模型绑定检查Album类,并查找能用于绑定的所有Album属性。因为MVC视图的命名都是非常规范的, 标签的name值和实体类的属性值一样。这样,遵照命名约定,默认的模型绑定器能自动将请求中的值转换和移入到一个Album对象中。如当模型绑定器看到Album有Title属性时,它就在请求中查找名为”Title”的参数,查到就加进来。

    3、显示模型绑定

    使用UpdataModel和TryUpdataModel方法显式调用模型绑定.如果使用UpdataModel方法,如在模型绑定期间出现错误或者模型无效,则会抛出一个异常。而TryUpdataModel方法则不会抛出异常,它返回的是一个布尔类型的值:true or false,true表示成功。

    以TryUpdataModel为例:

    复制代码
    [HttpPost]
            public ActionResult Edit()
            {
                var album = new Album();
                if (ModelState.IsValid)
                {
                    TryUpdateModel(album);
                    // EntityState.Modified表示这条数据是修改的,已有的,而不是新建的
                    db.Entry(album).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
    
                else
                {
                    ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
                    ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
                    return View(album);
                }
            }
    复制代码
  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/5139159.html
Copyright © 2011-2022 走看看