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();
   }
}

当屏幕加载时,这些值会正确绑定到页面。但是当我按下提交按钮时,人员对象的年龄和姓名都为空值。

因为我使用了 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

为什么你的模型objectGet方法中?这可能是混淆模型绑定器的原因。EditorFor这也看起来像为什么当您将它们更改为s时它会在页面加载时引发异常

尝试强输入:

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