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);
                }
            }
    复制代码
  • 相关阅读:
    C-Scanf连续调用多次并且存在%c的问题
    JavaScript-常用正则函数(适合忘记时看)
    JavaScript-深入理解JavaScript(一、预编译和执行过程)
    Python-代码性能优化技巧
    Python-深入理解元类(metaclass)
    Python-编码之大彻大悟
    Python-正确使用Unicode
    Fiddler-抓取安卓手机APP请求地址
    unity, access sprite of UGUI Image
    unity, UGUI Text outline
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/5139159.html
Copyright © 2011-2022 走看看