0


0

プロパティ値が変更された後、TryUpdateModelがオブジェクトを更新しない

MVC 2とEF4を使用しています。 アプリケーション(クラス)プロパティを表示するビューがあります。 すべてのプロパティがビューに表示されるわけではありません。 送信ボタンがクリックされたら、設定する必要があるプロパティがいくつかあります。

クライアントの検証に合格していますが、サーバーの検証はまだ失敗しています。 「CreateApplication」アクションで「Application」オブジェクトを受け取り、プロパティを更新して、「ModelState.IsValid」チェックを行います。 まだ間違っています。 エラーリストをループし、必須データアノテーションを使用して `SubmitterEmployeeNumber`プロパティに設定したエラーテキストを表示します。 設定し、モデルを更新しましたが、検証はまだ失敗しています。 これが私のコードです:

[HttpPost]
public ActionResult CreateApplication(Application application)
{
   application.SubmitterEmployeeNumber = "123456";

   TryUpdateModel(application);

   if (ModelState.IsValid)
   {
   }
}

ビューを表示する方法は次のとおりです。

public ActionResult CreateApplication()
{
   var viewModel = new ApplicationViewModel(new Application(), db.AccountTypes);

   return View(viewModel);
}

バインド後にプロパティを設定した後、検証に合格するにはどうすればよいですか?

「UpdateModel」と「TryUpdateModel」の違いは何ですか?また、それぞれをいつ使用する必要がありますか?

編集:

アクションの名前を次のように変更しました。

[HttpPost]
public ActionResult CreateApp()
{
   var application = new Application
   {
      ApplicationStateID = 1,
      SubmitterEmployeeNumber = "123456"
   };

   if (TryUpdateModel(application))
   {
      int success = 0;
   }
}

これが私の見解です。

<% using (Html.BeginForm("CreateApp", "Application")) {%>

`TryUpdateModel`はまだfalseとして検証します。 私は `int success = 0;`を入れて、それが入るかどうかを確認しますが、入らないのです。

1 Answer


1


[HttpPost]
public ActionResult CreateApplication()
{
    var application = new Application
    {
        SubmitterEmployeeNumber = "123456"
    };
    if (TryUpdateModel(application))
    {
        // The model is valid => submit values to the database
        return RedirectToAction("Success");
    }
    return View(application);
}

'' '' '

更新:コメントセクションでの多くの混乱のため、ここに完全な実例があります。

モデル:

public class Application
{
    [Required]
    public int? ApplicationStateID { get; set; }

    [Required]
    public string SubmitterEmployeeNumber { get; set; }

    [Required]
    public string Foo { get; set; }

    [Required]
    public string Bar { get; set; }
}

コントローラ:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var application = new Application();
        return View(application);
    }

    [HttpPost]
    [ActionName("Index")]
    public ActionResult Create()
    {
        var application = new Application
        {
            ApplicationStateID = 1,
            SubmitterEmployeeNumber = "123456"
        };
        if (TryUpdateModel(application))
        {
            // success => update database, etc...
            return Content("yupee");
        }

        // failure => redisplay view to fix errors
        return View(application);
    }
}

見る:

<% using (Html.BeginForm()) { %>

        <%: Html.LabelFor(x => x.Foo) %>
        <%: Html.TextBoxFor(x => x.Foo) %>
        <%: Html.ValidationMessageFor(x => x.Foo) %>



        <%: Html.LabelFor(x => x.Bar) %>
        <%: Html.TextBoxFor(x => x.Bar) %>
        <%: Html.ValidationMessageFor(x => x.Bar) %>



<% } %>

これが物事を解決することを願っています。