我一直在使用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()
方法总是生成带有默认值的文本框,即使在 postback 之后,对象以其值的不同属性传回。尽管我想不出为什么会有这样的实际场景,但我仍然不理解为什么我总是要使用 AcceptVerbs(HttpVerbs.Get)
属性设置的模型值填充文本框。
注意:我已经尝试过使用Html.TextBox("Name", Model.Name)
,但结果仍然相同。并且我通过 ViewData 向 View 传递一个值来验证了具有 AcceptVerbs(HttpVerbs.Post)
的 Create action 实际上正在运行。
另外,在使用 <%=Model.Name %>
输出值时,更新后的值会显示,但在文本框中没有显示更新后的值。我是否遗漏了什么明显的东西,或者这种行为背后是否有什么原因?