更新模型后,值不会反映在视图上

时间:2010-10-04 15:21:34

标签: asp.net-mvc-2 model updating

我使用Visual Web Developer 2010和ASP .NET与MVC2创建一个简单的客户管理模块,其中视图将允许输入名字,姓氏,地址等,并在提交时,新的“ID”将被分配给CustomerModel实例的CustomerID属性。

用于创建客户的Controller方法(CustomerController)如下:

<HttpPost()> _
Public Function CreateCustomer(ByVal model As CustomerModel) As ActionResult
    model = Me.customerServiceClientValue.CreateCustomer(model)
    Return (View(model))
End Function

我可以看到控件到达CreateCustomer()方法内部,并调用Customer Service来创建客户。该服务还返回具有新ID的客户。与该方法一样,从服务调用返回的客户实例被分配回进入的“模型”变量。该模型实例将传递给return语句中的“View”。但是,当刷新视图时,我看不到客户ID字段的值。

我对客户ID字段进行了以下标记:

<div class="editor-label">
    <%: Html.LabelFor(Function(model) model.CustomerID)%>
</div>
<div class="editor-field">
    <%: Html.TextBoxFor(Function(model) model.CustomerID)%>
    <%: Html.ValidationMessageFor(Function(model) model.CustomerID)%>
</div>

我做错了什么?虽然模型包含新的客户ID,但为什么我没有在该字段中获取客户ID?感谢您的所有帮助。

谢谢和问候,

Dinesh Jayadevan

1 个答案:

答案 0 :(得分:2)

因为TextBoxFor(和其他帮助者)总是首先查看要显示的帖子值。如果不存在后置值,则查看模型。这样做的原因是,如果您的表单有错误,您通常希望表单显示与发布的数据相同的数据,而不是某些可能更改的模型数据。

您可以在控制器中调用ModelState.Clear();以防止这种情况,但这不是一个好主意。

有关此内容的更多信息 http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx