【发布时间】:2014-05-18 08:44:39
【问题描述】:
我有一个非常大的用户配置文件模型。大约有 15 种不同的新用户类别(例如,年轻旅行者、经验丰富的旅行者、船长、舵手……)。根据用户类别,模型的某些数据字段不适用,在数据库中保留null。
我正在尝试通过一个大型注册表单来填充模型。 JavaScript 根据用户之前的回答确定用户类别,并在表单中显示/隐藏适用/不适用的输入字段。
出现以下问题:
根据用户类别,我需要在表单中以稍微不同的顺序显示一些输入字段。我通过为视图中的同一数据字段(例如,
@Html.TextBoxFor(x => x.Age))创建多个输入字段,然后根据用户类别使用 JavaScript 仅显示一个来解决此问题。我的计划是只提交可见的输入字段,这样服务器就不会混淆使用哪些输入字段来创建模型。
不幸的是,Visual Studio 并不能很好地发挥作用:首先,存在多个输入字段具有相同
id的问题;我也许可以忍受。但是,HTML 源代码中的验证属性仅针对视图中每个数据字段的第一次出现(例如,@Html.TextBoxFor(x => x.Age))生成,而不是以后的任何出现。
例如,第一次出现
<input data-val="true" data-val-number="The field Age must be a number."
data-val-range="The field Age must be between 10 and 99." data-val-range-max="99"
data-val-range-min="10" id="Age" name="Age" type="text" value="">
第二次仅生成
<input id="Age" name="Age" type="text" value="">
我该如何解决这个问题?我的想法:
- 在视图的开头创建一次隐藏的所有输入字段,并使用 Javascript 在表单中动态生成。缺点:工作量很大,所有页面结构现在都在 JavaScript 中而不是视图中。
- 为不同的用户类别使用部分视图。缺点:打开表单页面时(在控制器中),我从数据库中检索几个列表并将它们放入模型中,以便在视图中填充表单 DropDown 输入字段和 RadioButton 输入列表。有没有办法在部分视图中重用这些信息,从而减少重复的数据库查询?
非常感谢您对这种情况的任何想法。我对 ASP.NET MVC 有点陌生。
【问题讨论】:
标签: asp.net-mvc forms asp.net-mvc-4 views