4

非常に単純なASP.NETMVC4ページがあります。CustomerModelの編集フォームをレンダリングしています。フォームは正しく表示されますが、[編集]をクリックしてポストバックすると、モデルがバインドされていません。代わりに、CustomerModelのすべてのプロパティがデフォルトのままになります。正しいコントローラーメソッド呼び出されているので、それは問題ではないことに注意してください。

モデルのプロパティ(Id、Name、Description)に一致する名前のフォーム値を確認できますが、モデルに設定されていません。

アイデア?

モデルは次のとおりです。

public class CustomerModel
{
    [Required] 
    public Guid Id;

    [Required]
    public string Name;

    [Required]
    public string Description;
}

そして、これが関連するコントローラーメソッドです:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(CustomerModel customerModel)
    {
        if (ModelState.IsValid)
        {
            //...Do stuff

            return RedirectToAction("Index");
        }

        return View(customerModel);
    }

最後に、値が入力されたフォームコレクションのスクリーンショットを次に示します。

ここに画像の説明を入力してください

4

1 に答える 1

11

モデルにはパブリックフィールドがありますが、パブリックプロパティはありません。これらは同じではありません。

への変更:

public class CustomerModel
{
    [Required] 
    public Guid Id {get; set;}

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

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

デフォルトのMVCモデルバインダーは、フィールドではなくプロパティで機能します。

これについての詳細はこちら-http://rightbrainleft.net/2011/02/default-mvc-model-binder-doesnt-like-fields/

于 2013-01-15T04:02:20.290 に答える