Asp.net mvc 我还能做些什么来消除这些观点吗?

Asp.net mvc 我还能做些什么来消除这些观点吗?,asp.net-mvc,razor,dry,Asp.net Mvc,Razor,Dry,我复制/粘贴了这么多,我觉得我一定能做些什么来改进这段代码 或者我有没有尽可能地去看那些枯燥无味的风景 例如,我的EditPet.cshtml视图如下所示: @model PetEditViewModel @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.Partial("_ValidationSummary", ViewData.ModelState) @Html.HiddenFor(model =&

我复制/粘贴了这么多,我觉得我一定能做些什么来改进这段代码

或者我有没有尽可能地去看那些枯燥无味的风景

例如,我的EditPet.cshtml视图如下所示:

@model PetEditViewModel

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.Partial("_ValidationSummary", ViewData.ModelState)
    @Html.HiddenFor(model => model.Item.ID)
    @Html.EditorFor(m => m.Item)
    @Html.Partial("_SaveOrCancelButtons")
}
@model ShoeEditViewModel

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.Partial("_ValidationSummary", ViewData.ModelState)
    @Html.HiddenFor(model => model.Item.ID)
    @Html.EditorFor(m => m.Item)
    @Html.Partial("_SaveOrCancelButtons")
}
我的EditShoe.cshtml视图如下所示:

@model PetEditViewModel

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.Partial("_ValidationSummary", ViewData.ModelState)
    @Html.HiddenFor(model => model.Item.ID)
    @Html.EditorFor(m => m.Item)
    @Html.Partial("_SaveOrCancelButtons")
}
@model ShoeEditViewModel

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.Partial("_ValidationSummary", ViewData.ModelState)
    @Html.HiddenFor(model => model.Item.ID)
    @Html.EditorFor(m => m.Item)
    @Html.Partial("_SaveOrCancelButtons")
}
等等。。。大约30种不同的型号。创建和删除视图同上。唯一不同的一行是顶部的模型声明

我所尝试/考虑的

  • 使用
    Html.Partial()。但进一步走这条路似乎是不合理的

  • 我已经研究了一般的剃须刀视图,但这是,我看到的任何解决方案对我来说都过于复杂

  • 我考虑的第三种可能性是使用模板并自动生成这些视图。但我不想采用这种方法,因为它们仍然需要维护(或每次重新创建)

  • 最后,我考虑将重复的代码转换为editortemplate。但我看不出将复制品从一个位置转移到另一个位置有什么好处


  • 您是说生成的控件仅与模型中的
    属性关联吗?是的model.Item`保存要编辑的数据模型。有些虚拟机有其他属性(例如下拉选项),但大多数虚拟机没有。但是,即使直接编辑数据模型,我也会得到相同的结果。因此,我假设
    在一个视图中可能是一个
    类型
    (例如
    Pet.cs
    ),在另一个视图中可能是另一个
    类型
    Shoe.cs
    )。如果是这样,那么我认为你已经尽了你所能/应该做的。例如,您可以创建一个
    HtmlHelper
    扩展方法,该方法仅使用一行代码(比如)
    @html.MyFormFor(m=>m)
    )生成所有html,但需要有一个可读性第一的点。是的,正确。再次感谢斯蒂芬。如果你能把它转换成一个答案,我会这样做。我的评论实际上只是一个观点,不适合作为答案:)