0

我使用 Visual Web Developer 2010 和带有 MVC2 的 ASP .NET 创建了一个简单的客户管理模块,其中视图将允许输入名字、姓氏、地址等,并且在提交时,将分配一个新的“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() 方法内部,它调用了客户服务来创建客户。该服务还会返回具有新 ID 的客户。与该方法一样,从服务调用返回的客户实例被分配回传入的“模型”变量。该模型实例在返回语句中传递给“视图”。然而,当刷新视图时,我看不到客户 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?感谢您的所有帮助。

谢谢并恭祝安康,

迪内什·贾亚德万

4

1 回答 1

2

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

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

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

于 2010-10-04T16:33:47.770 回答