Asp.net mvc 3 使用具有多种类型的模型并创建不同的EditorForModel模板
我对如何实现EditorForModel有点困惑。我有在Views\Shared\EditorTemplates中设置模板的想法,但我认为我研究过了(如果可能的话),这导致了我的困惑 基本上,我试图最小化代码复制。我为客户提供5项服务,每项服务有4-6种不同的解决方案。让事情变得更复杂的是,许多解决方案在不同程度上可以共享某些类型的解决方案 要简化此操作,请使用以下类型:Asp.net mvc 3 使用具有多种类型的模型并创建不同的EditorForModel模板,asp.net-mvc-3,Asp.net Mvc 3,我对如何实现EditorForModel有点困惑。我有在Views\Shared\EditorTemplates中设置模板的想法,但我认为我研究过了(如果可能的话),这导致了我的困惑 基本上,我试图最小化代码复制。我为客户提供5项服务,每项服务有4-6种不同的解决方案。让事情变得更复杂的是,许多解决方案在不同程度上可以共享某些类型的解决方案 要简化此操作,请使用以下类型: public string FirstName { get; set; } 我将在每个解决方案中使用它(并在每个服务中使用
public string FirstName { get; set; }
我将在每个解决方案中使用它(并在每个服务中使用“树”)。但很明显,我还有许多其他类型的解决方案,它们要么在几个解决方案中共享,要么根本没有
假设每种服务有100种类型。我可以将它们划分为不同的视图模型,但是我必须通过5个服务来考虑这一点。我更希望每个服务都将它们放在一个视图模型中
当我尝试创建模板时,我的麻烦来了。我想使用模板,因为我使用的是向导,我不想在特定的解决方案中为向导的每个部分重新创建视图,特别是如果它是相同的“数据”(并且,再次考虑到我拥有的解决方案的数量)
因此,我创建了一个BasicDetails.cshtml视图(具有FirstName、LastName和Email等类型),它实际上可以在所有解决方案中使用。编辑器模板在这里似乎很理想,但我的困惑是,如果我使用ServiceViewModelOne.cs并执行@Html.EditorForModel(),我会吐出所有100种类型,或者使用模板,通过在\Views\Shared\EditorTemplates\ServiceViewModelOne.cshtml创建模板,只吐出我想要的BasicDetails.cshtml中的类型
例如,现在,我是否能够执行以下操作:
@Html.EditorForModel("BasicDetails")
@Html.EditorForModel("WizardStep2")
@Html.EditorForModel("WizardStep3")
对于我想要制作的每个自定义模板(以及我想要制作的更多模板),是否都使用相同的ServiceViewModelOne.cs?如果我是正确的,那么我将具有以下文件夹结构:
- \查看\Shared\EditorTemplates\BasicDetails.cshtml
- \View\Shared\EditorTemplates\WizardStep2.cshtml
- \View\Shared\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>
...
或者在类型级别
public class MyModel
{
[UIHint("FirstName")]
public string FirstName { get; set; }
}
我可以创建一个MyModel.cs,然后将其中的一些类型自动映射到MyViewModelOne.cs、MyViewModelTwo.cs等
不过,可以说,我想我会把自己打进去的
假设我有1型,2型,3型,4型。Type1可以用于每个解决方案(保持简单,假设有4个解决方案)。Type2和Type3可以在一个解决方案中使用,但不能在其他解决方案中使用。假设在另一个解决方案中,我可以使用Type2和Type4
使用UIHint或automapping意味着我必须创建3种不同的东西来解释上面的问题,如果我需要在另一个解决方案中使用Type3和Type4该怎么办
我可能会偏离基准,但这似乎迫使我创建多个排列,这正是我希望避免的
我承认我没有使用AutoMapper,我正在研究这是否会有帮助。由于你问题的复杂性,这有点让人困惑,但我想尝试一下 编辑器模板通过两种方式消除约定-文件名需要与模型名匹配,模板类型需要与模型类型匹配 因此,如果您有多个具有不同名称的类,但您希望使用单个模板,那么它将无法立即工作 我可以看到几个选择
[UIHint]
指定模板的名称@Html.EditorForModel("BasicDetails")
其中,“BasicDetails”是当前控制器中模板的名称 你绝对理解我的困境。我已经更新了我的问题,以考虑您的回答。@REMESQ-听起来您已经根据编辑的外观对其进行了排序。我很高兴,因为它变得更加令人困惑
@Html.EditorForModel("BasicDetails")