asp.net MVC“创建视图”和数据
asp.net MVC “create view” and data
我有一个使用模型的创建视图,哦,假设是客户。在 HttpGet
上,如果我像大多数教程一样没有传递 Customer 对象,那么我就不能使用任何语句,如 @Model.CustomerID
等。如果我确实选择使用 @Model.xxxx
语句,它们将因缺少客户对象。所以一切都很好,因为在创建视图上,创建视图的 HttpGet
请求中不需要数据。
然后当用户输入所有请求的数据并单击“提交”按钮时,我的 JavaScript 开始验证。假设我不检查或不能检查每一个可能的错误。 post-back 发生,服务器验证码发现错误。我想 post 创建视图中的服务器端验证错误。没问题,因为我在页面上有验证摘要。然而,由于视图上没有 @Model.xxxxx
语句从模型中提取数据,客户的数据将被忽略,他只会看到错误消息。当然,解决方法是在 HttpGet
和 HttpPost
.
上将 Customer 对象作为模型传递
然后我将传递一个 Customer 对象,其中字符串初始化为 string.Empty
并且整数等初始化为 0 或其他。然后我添加 @Model.xxxxx
语句来提取数据。当然,数据是在 HttpGet
和 HttpPost
上提取的,但这没关系,因为我如上所述初始化了 Customer 对象。
我已经完成了所有这些并且它有效,但这是否遵循了最佳实践?我是不是哪里出错了?
您不需要初始化每个字段。您可以继续使用 EditorFor
或 DisplayFor
助手,它们将表达式作为参数。如果模型为空,它们不会呈现内容。所以你只需要在默认操作中传递一个空模型。
示例:
@model Customer
@using(Html.BeginForm(blabla)) {
<div>
@Html.ValidationMessageFor(m => m.Name)
@Html.EditorFor(m => m.Name)
</div>
<div>
@Html.DisplayFor(m => m.Status)
</div>
}
这根本不会导致任何异常。它还会正确显示验证错误。
如果您需要自定义EditorFor和DisplayFor使用的模板,您可以在EditorTemplates和DisplayTemplates文件夹下创建它们,并以您要自定义的数据类型命名。
实际上,如果您正确设置模板,您甚至不需要任何 HTML。只需这样做即可:
@model Customer
@using(Html.BeginForm(blabla)) {
@Html.EditorForModel()
}
它将根据客户模型中各个数据类型的模板创建表单布局。
我有一个使用模型的创建视图,哦,假设是客户。在 HttpGet
上,如果我像大多数教程一样没有传递 Customer 对象,那么我就不能使用任何语句,如 @Model.CustomerID
等。如果我确实选择使用 @Model.xxxx
语句,它们将因缺少客户对象。所以一切都很好,因为在创建视图上,创建视图的 HttpGet
请求中不需要数据。
然后当用户输入所有请求的数据并单击“提交”按钮时,我的 JavaScript 开始验证。假设我不检查或不能检查每一个可能的错误。 post-back 发生,服务器验证码发现错误。我想 post 创建视图中的服务器端验证错误。没问题,因为我在页面上有验证摘要。然而,由于视图上没有 @Model.xxxxx
语句从模型中提取数据,客户的数据将被忽略,他只会看到错误消息。当然,解决方法是在 HttpGet
和 HttpPost
.
然后我将传递一个 Customer 对象,其中字符串初始化为 string.Empty
并且整数等初始化为 0 或其他。然后我添加 @Model.xxxxx
语句来提取数据。当然,数据是在 HttpGet
和 HttpPost
上提取的,但这没关系,因为我如上所述初始化了 Customer 对象。
我已经完成了所有这些并且它有效,但这是否遵循了最佳实践?我是不是哪里出错了?
您不需要初始化每个字段。您可以继续使用 EditorFor
或 DisplayFor
助手,它们将表达式作为参数。如果模型为空,它们不会呈现内容。所以你只需要在默认操作中传递一个空模型。
示例:
@model Customer
@using(Html.BeginForm(blabla)) {
<div>
@Html.ValidationMessageFor(m => m.Name)
@Html.EditorFor(m => m.Name)
</div>
<div>
@Html.DisplayFor(m => m.Status)
</div>
}
这根本不会导致任何异常。它还会正确显示验证错误。
如果您需要自定义EditorFor和DisplayFor使用的模板,您可以在EditorTemplates和DisplayTemplates文件夹下创建它们,并以您要自定义的数据类型命名。
实际上,如果您正确设置模板,您甚至不需要任何 HTML。只需这样做即可:
@model Customer
@using(Html.BeginForm(blabla)) {
@Html.EditorForModel()
}
它将根据客户模型中各个数据类型的模板创建表单布局。