1

フィールドに値がなく、データベースで null 可能でない場合、TryUpdateModel でエラーが発生します。データベースのフィールドを nullable に変更すると、機能します。これをnull不可のフィールドで動作させるための修正を知っている人はいますか? 私は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);
    }
4

1 に答える 1

0

私が変更するいくつかのことがあります。

  1. メソッド シグネチャを変更して、ActionResult期待している厳密に型指定されたモデルを受け入れます。そこから、モデルが有効かどうかを確認し、データベースへの保存を続行できます

  2. モデルを検証するために、厳密に型指定されたモデルとデータ アノテーションを使用する

例えば:

フォームの Get および 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);
}
于 2012-05-30T18:34:06.130 に答える