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.

相关文章

项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并。 使用了...
安装新版本的Nginx(vim /etc/yum.repos.d/nginx.repo) [nginx-stable] name=nginx stable repo baseu...
什么是 SignalR&#160;ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功...
在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。 ## Docker Desktop介绍及安装 Do...
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求...
银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主...