asp.net MVC“创建视图”和数据
Posted
技术标签:
【中文标题】asp.net MVC“创建视图”和数据【英文标题】:asp.net MVC “create view” and data 【发布时间】:2019-12-15 09:27:06 【问题描述】:我有一个使用模型的创建视图,哦,假设是客户。在HttpGet
上,如果我像大多数教程一样不传递任何客户对象,那么我不能使用像@Model.CustomerID
等任何语句。如果我确实选择使用@Model.xxxx
语句,它们将因缺少客户对象而失败。所以一切都很好,因为在创建视图上,创建视图上的 HttpGet
请求中不需要数据。
然后,当用户输入所有请求的数据并单击提交按钮时,我的 javascript 开始验证。假设虽然我不检查或无法检查每一个可能的错误。回发发生并且服务器验证代码发现错误。我想在创建视图中发布服务器端验证错误。没问题,因为我在页面上有一个验证摘要。但是,由于视图上没有 @Model.xxxxx
语句来从模型中提取数据,因此忽略了客户的数据,并且只向他显示错误消息。当然,解决方法是在 HttpGet
和 HttpPost
上都传递一个 Customer 对象作为模型。
然后,我将传递一个 Customer 对象,其字符串初始化为 string.Empty
,ints 等初始化为 0 或其他。然后我添加@Model.xxxxx
语句来提取数据。当然,在HttpGet
和HttpPost
上都提取了数据,但这没关系,因为我如上所述初始化了 Customer 对象。
我已经完成了所有这些并且它有效,但这是否遵循最佳实践?我是不是哪里出错了?
【问题讨论】:
你在使用属性属性吗?你能给我们看一些代码吗? 是的,我正在使用属性。 【参考方案1】:您不需要初始化每个字段。您可以继续使用EditorFor
或DisplayFor
帮助器,它们将表达式作为参数。如果 Model 为空,它们不会呈现内容。所以你只需要在你的默认操作中传递一个空模型。
例子:
@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()
它将根据客户模型中各个数据类型的模板创建表单布局。
【讨论】:
以上是关于asp.net MVC“创建视图”和数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型