asp.net-mvc – ASP.NET MVC:在回发上更改模型的属性

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC:在回发上更改模型的属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在玩ASP.NET MVC,遇到了我无法想象的东西.

假设我有一个这样的对象:

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

和一个视图页面(Create.aspx),如下所示:

<form action="/Create" method="post">
    <p>
        <%=Html.TextBox("Name") %>
    </p>
    <p>
        <%=Html.TextBox("Age")%>
    </p>
</form>

在我的控制器上我有这些行动:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Create()
{
    return View(new TestObject { Name = "DefaultName",Age = 10 } );
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(TestObject o)
{
    o.Name = "ChangedNameToSomethingElse";
    o.Age = 15;
    return View(o);
}

即使在回发之后,Html.TextBox()方法总是使用默认值来生成文本框,其中对象的值返回不同的属性.现在,我不能想到一个真实世界的例子,为什么我想做这样的事情,但我仍然不明白为什么我总是最终有文本框填充模型的值在创建动作与AcceptVerbs(HttpVerbs.Get)属性.

注意:我尝试过Html.TextBox(“Name”,Model.Name),但结果仍然相同.而且我验证了使用AcceptVerbs(HttpVerbs.Post)创建操作实际上是通过ViewData将值传递给View来运行的.
此外,当我输出值为&%= Model.Name%>但再次,不在文本框上.

有没有什么明显的我失踪了,还是有这个行为背后的推理?

解决方法

如果您通过方法声明或UpdateModel或TryUpdateModel将绑定的结果绑定到诸如TestObject的对象,则将使用这些值填充名为ModelState的属性. HTML帮助器(如TextBox)将始终与显式传递的模型对象绑定到modelstate.

猜你在找的asp.Net相关文章