【问题标题】:asp.net MVC “create view” and dataasp.net MVC“创建视图”和数据
【发布时间】: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 对象。

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

【问题讨论】:

  • 你在使用属性属性吗?你能给我们看一些代码吗?
  • 是的,我正在使用属性。

标签: asp.net-mvc create-view


【解决方案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()
}

它将根据客户模型中各个数据类型的模板创建表单布局。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多