3

非常に基本的なモデル:

public class Person
{
    public string Name;
    public int Age;
}

と非常に単純なビュー:

@model DynWebPOC.Models.Person

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Hello, @Model.Name
<br/>
You're getting old at @Model.Age years old now!

@using(Html.BeginForm("Index","Test",FormMethod.Post))
{
    <fieldset>       
        <label for="name" style="color: whitesmoke">Name:</label>    
        @Html.TextBoxFor(m => m.Name)
        <br/>
        <label for="age" style="color: whitesmoke">Age:</label>

        @Html.TextBoxFor(m => m.Age)

        <br/>
        <input type="submit" value="Submit"/>
    </fieldset>
}

そして、非常に単純なコントローラー:

public class TestController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        object model = new Person {Name = "foo", Age = 44};
        return View(model);
    }


   [HttpPost]
   public ActionResult Index(Person person)
   {
       return View();
   }
}

画面が読み込まれると、値がページに正しくバインドされます。しかし、送信ボタンを押すと、人物オブジェクトの年齢と名前がすべて null 値になります。

Html.TextBoxFor を使用したため、すべてのバインドが正しく設定され、オブジェクトが自動的に POST にバインドされているはずではありませんか? GET..でうまくバインドします。

Html.BeginForm() の呼び出しで何か見逃したのでしょうか?

4

2 に答える 2

6

モデルにプロパティを作成する必要があります

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

それ以外の

public class Person
{
    public string Name;
    public int Age;
}

ASP.net MVC はプロパティのみをバインドします。

于 2013-01-23T18:40:22.820 に答える
1

モデルがメソッドobject内にあるのはなぜですか? Getそれがモデルバインダーを混乱させているのかもしれません。EditorForまた、それらをsに変更すると、ページの読み込み時に例外がスローされる理由のようにも見えます

強く入力してみてください:

[HttpGet]
public ActionResult Index()
{
    Person model = new Person {Name = "foo", Age = 44};
    return View(model);
}
于 2013-01-23T18:22:53.863 に答える