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 语句来从模型中提取数据,因此忽略了客户的数据,并且只向他显示错误消息。当然,解决方法是在 HttpGetHttpPost 上都传递一个 Customer 对象作为模型。

然后,我将传递一个 Customer 对象,其字符串初始化为 string.Empty,ints 等初始化为 0 或其他。然后我添加@Model.xxxxx 语句来提取数据。当然,在HttpGetHttpPost 上都提取了数据,但这没关系,因为我如上所述初始化了 Customer 对象。

我已经完成了所有这些并且它有效,但这是否遵循最佳实践?我是不是哪里出错了?

【问题讨论】:

你在使用属性属性吗?你能给我们看一些代码吗? 是的,我正在使用属性。 【参考方案1】:

您不需要初始化每个字段。您可以继续使用EditorForDisplayFor 帮助器,它们将表达式作为参数。如果 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 - 如何在各种视图中保留模型

如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型

如何只显示数据库中最近的 5 条记录 - ASP.NET MVC

ASP.NET MVC载入页面常用方法

ASP.NET MVC 组合框值加载

ASP.NET MVC 页面验证失败(值无效。)