我对如何实现EditorForModel有点困惑。我得到了在Views \ Shared \ EditorTemplates中设置模板的想法,但我认为我已经过度研究(如果可能的话),这导致了我的困惑。使用多种类型的模型并创建不同的EditorForModel模板
基本上,我试图尽量减少代码复制。我为客户提供了5项服务,每项服务都有4至6种不同的解决方案。使事情变得更加复杂,在某种程度上可以在许多解决方案中共享某些类型。
为了使这个简单,采取类型:
public string FirstName { get; set; }
我会在每个解决方案使用这个(和上升中的每一个服务的“树”)。但很明显,我有许多其他类型的解决方案,或者在几个解决方案之间共享,或者根本没有。
比方说,我有100种类型的每个服务。我可以将它们分开为不同的查看模型,但是我必须将这5个服务分解。我宁愿将它们全部保存在一个View Model,每个服务中。
我尝试创建模板时遇到了麻烦。我想使用模板,因为我使用的是向导,我不想在特定的解决方案中为向导的每个部分重新创建视图,特别是如果它是相同的“数据”(并且再次考虑因素我拥有的解决方案数量)。
因此,我创建了一个BasicDetails.cshtml视图(带有名字,姓氏和电子邮件等类型),它可以在所有解决方案中实际使用。一个编辑器模板在这里看起来很理想,但是我的困惑产生了,因为如果我使用ServiceViewModelOne.cs并执行@ Html.EditorForModel(),我要么吐出所有100种类型,要么使用模板只吐出我想要的内容BasicDetails.cshtml,在\ Views \ Shared \ EditorTemplates \ ServiceViewModelOne.cshtml中创建一个模板。
现在,我将能够,例如,请执行下列操作:
@Html.EditorForModel("BasicDetails")
@Html.EditorForModel("WizardStep2")
@Html.EditorForModel("WizardStep3")
因为我想让(和但更多的我想作)每个自定义模板,使用相同的ServiceViewModelOne的.cs?如果我是正确的,我会再有以下文件夹结构:
- \查看\共享\ EditorTemplates \ BasicDetails.cshtml
- \查看\共享\ EditorTemplates \ WizardStep2.cshtml
- \查看\共享\ EditorTemplates \ WizardStep3.cshtml
- ...
显然,每个模板中我会有相应的
<div class="editor-label">
@Html.LabelFor(m => m.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.FirstName)
@Html.ValidationMessageFor(m => m.FirstName)
</div>
...
所有的HTML输入特定向导中的步骤(包括整个HTML布局)
这会是一种适当的方式做我想做的,还是我找错了树?
更新: 我想过使用UIHint,但我不确定它是否会完全工作。
我可以在模型层使用UIHint:
[UIHint("BasicDetails")]
public class MyModel {}
或在类型级别
public class MyModel
{
[UIHint("FirstName")]
public string FirstName { get; set; }
}
而且我可以在那里创建一个MyModel.cs,然后自动映射的一些类型到MyViewModelOne.cs,MyViewModelTwo.cs等。
不过,我想我会结束自己的拳击,可以这么说。
比方说,我有Type1,Type2,Type3,Type4。 Type1可以用于每个解决方案(保持简单,可以说有4个解决方案)。 Type2和Type3可以用于一种解决方案,但不能用于其他解决方案。并且可以说在另一个解决方案中,我可以使用Type2和Type4。
使用UIHint或automapping意味着我将不得不创建3个不同的东西来解决上述问题,以及如果我需要在另一个解决方案中使用Type3和Type4会怎样。
我可能脱离基地,但它似乎限制迫使我创造多个排列,这正是我希望避免的。
我会承认没有使用过AutoMapper,并且正在研究是否有帮助。
你绝对明白我的困境。我已更新我的问题,以考虑您的回应。 – REMESQ 2012-02-06 20:47:27
@REMESQ - 听起来像你已经按照你的编辑外观排序了。我很高兴,因为它变得更加混乱。 :) – RPM1984 2012-02-07 02:20:36