我做了一个非常简单的问题模型。
如果我有一个复杂的人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; }
}
问题:
正如您所看到的,我在“创建”和“编辑”视图中有两个相同的区域,我想避免使用代码。我不能使用部分视图,因为部分视图中的模型不会绑定在帖子上。如何避免重复查看代码?
答案 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
从控制器传递到视图。