如何避免MVC中的视图代码重复?

时间:2015-02-22 16:39:24

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller

我做了一个非常简单的问题模型。

如果我有一个复杂的人viewModel:

 public class PersonViewModel
{
    public string Name { get; set; }
    public List<DogViewModel> Dogs { get; set; }
}

public class DogViewModel
 {
    public string Name { get; set; }
 }

我有2个观点:编辑人物并创建一个人:

@model Custom.Models.PersonEditViewModel
@{
    ViewBag.Title = "Edit";
}

<h2>Edit Person</h2>

<div class="PersonDataArea">
    //this contain identical html in Create and Edit view
</div>
<div class="SelectDogAre">
    //this contain identical html in Create and Edit view
</div>

<input type="button" value="save" />





@model Custom.Models.PersonCreateViewModel
@{
    ViewBag.Title = "Create";
}

<h2>Create Person</h2>

<div class="PersonDataArea">
    //this contain identical html in Create and Edit view
</div>
<div class="SelectDogAre">
    //this contain identical html in Create and Edit view
</div>

<input type="button" value="save"/>

当然每个视图都有2个ViewModel:

public class PersonEditViewModel
    {
        public PersonViewModel Person { get; set; }
    }




public class PersonCreateViewModel
{
    public PersonViewModel Person { get; set; }
}

问题:

正如您所看到的,我在“创建”和“编辑”视图中有两个相同的区域,我想避免使用代码。我不能使用部分视图,因为部分视图中的模型不会绑定在帖子上。如何避免重复查看代码?

1 个答案:

答案 0 :(得分:0)

您肯定需要使用部分视图。

首先,您不需要两个单独的View Models。只需PersonViewModel即可。

然后你将创建一个部分视图_PersonEdit.cshtml(就像你在代码中缺少表单一样):

@model Custom.Models.PersonViewModel

@using(Html.BeginForm())
{
    <div class="PersonDataArea">
        //this contain identical html in Create and Edit view
    </div>
    <div class="SelectDogAre">
        //this contain identical html in Create and Edit view
    </div>

    <input type="button" value="save"/>
}

并且,两个创建和编辑视图:

创建:

@{
    ViewBag.Title = "Create";
}

<h2>Create Person</h2>

@Html.Partial("_PersonEdit", Model)

编辑:

@{
    ViewBag.Title = "Edit";
}

<h2>Edit Person</h2>

@Html.Partial("_PersonEdit", Model)

或者,您只能为这两个操作创建一个视图,并将ViewBag.Title从控制器传递到视图。