【问题标题】:MVC @Html.TextBoxFor(model => model.SomeNotNullableType) inserting default valueMVC @Html.TextBoxFor(model => model.SomeNotNullableType) 插入默认值
【发布时间】:2011-11-01 19:45:26
【问题描述】:

MVC @Html.TextBoxFor(model => model.SomeNotNullableType) 使用此帮助程序时,如果我有一个在数据库中不可为空的类型,则视图最终会在文本框中显示一个默认值。特别是在我的例子中,该字段采用一个整数,并且在该字段中放置一个默认值 0。

我知道我可以使用 Javascript 或 setting the default value in html 删除错误的 0,但我希望有一种更“正确”的方式来执行此操作。我可以在我的模型中指定我不希望将默认视图放入文本框中吗(您不能将其设置为 null,因为它不可为 null)。坚持真正的模型方法,我想在模型/控制器中修复它,而不是在视图中。

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    也许为该模型类添加一个具有可为空的int 属性(以及该类的所有其他属性)的视图模型,然后使用数据注释使其成为必填字段将达到您正在寻找的目的。

    然后您只需要将视图模型回滚到控制器中的数据持久性类中。

    【讨论】:

    • 我同意这可能是最好的方法,但我希望我不需要为每个具有可空类型的模型创建“辅助”视图模型。
    • 好吧,理论上你不应该首先传递持久性对象,所以你总是需要在显示层和数据层之间建立某种中间类。
    • 好吧,我本来打算回答同样的问题,但被同事问了一个问题,你打败了我!干得好。
    • @nathan :您能澄清一下“持久性对象”是什么意思吗?我正在使用存储库模式并将实体作为模型传递给视图。我应该为每个存储库模型创建一个单独的视图模型吗?你有一个例子说明为什么我遵循这种做法是不好的吗? – Rastapopulous 6 分钟前
    • @Rastapopulous,由你的 orm 提供的对象,如果你正在使用的话。大多数 orm 会在您的班级顶部放置一个代理,然后您与该代理对象进行交互。通过将该对象传递到视图中,您传递的对象的信息(持久性、状态等)比您的视图需要的多。如果您的存储库返回的对象不是源自 orm,则该点无效,因为从代理对象的转换已经发生。
    【解决方案2】:

    您可以为创建文本框的 int 类型创建自定义编辑器(部分视图),并且可以将值设置为默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 2011-07-20
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      相关资源
      最近更新 更多