TryUpdateModel出错

时间:2012-05-30 17:25:49

标签: asp.net-mvc-3

当字段没有值并且在数据库中不可为空时,我在TryUpdateModel中收到错误。如果我将数据库中的字段更改为可空,则可以正常工作。任何人都知道一个修复,让这个与非可空字段一起工作?我是MVC的新手,所以我只是在玩一个教程来试图理解它......

        [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Add(FormCollection form)
    {
        var movieToAdd = new Movies();

        if (Request != null && Request.Form != null && Request.Form.HasKeys() && ValueProvider == null)
        {
            ValueProvider = new FormCollection(Request.Form).ToValueProvider();
        }

        //Deserialize (Include white list!)
        TryUpdateModel(movieToAdd, new string[] { "Title", "Director" }, form.ToValueProvider());

        // Validate
        if (string.IsNullOrEmpty(movieToAdd.Title))
            ModelState.AddModelError("Title", "Title is required!");
        if (string.IsNullOrEmpty(movieToAdd.Director))
            ModelState.AddModelError("Director", "Director is required!");

        // If valid, save movie to database
        if (ModelState.IsValid)
        {
            _db.AddToMovies1(movieToAdd);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }

        // Otherwise, reshow form
        return View(movieToAdd);
    }

1 个答案:

答案 0 :(得分:0)

我会改变一些事情。

  1. 修改方法签名以接受ActionResult期望的强类型模型。从那里,您可以检查模型是否有效,并继续保存到数据库

  2. 使用强类型模型和数据注释来验证模型

  3. EG:

    创建一个模型,您可以将其用于表格Get And Post操作:

    public class YourModel
    {
    
        [Required]
        public string Title {get; set;]
    
        [Required]
        public string Director {get; set;}
    
    }
    

    你的Post ActionResult然后变成:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Add(YourModel postedform)
    {
        // If valid, save movie to database
        if (ModelState.IsValid)
        {
            _db.AddToMovies1(postedform);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }
    
        // Otherwise, reshow form
        return View(postedform);
    }