我想创建一个模型 - 视图 - 控制器,不需要if-else用于单独的控件,或者必须复制这些控件来处理不同的屏幕控制。
目前我有: -
//控制器
public ActionResult DisplayThing1(int thingType, string thingName){
Thing1Model model = new Thing1Model();
return View(model);
}
[HttpPost]
public ActionResult DisplayThing1(Thing1Model model)
{
Save(model);
return RedirectToAction("DisplayThing1");
}
// model
public class Thing1Model()
{
public int type {get; set; }
public string Name {get; set;}
}
//查看
@using(Html.BeginForm(....))
{
@Html.HiddenFor(m=>m.type);
@Html.LabelForI(m=>m.Name);
}
我有Thing2Model
的重复控制器,模型本身是
public class Thing2Model()
{
public int type {get; set; }
public string Name {get; set;}
public DateTime MyDate {get; set;}
}
组合视图如下所示。
@using(Html.BeginForm(....))
{
@Html.HiddenFor(m=>m.type);
@Html.LabelForI(m=>m.Name);
@if(type == "2")
{
@Html.TextBoxFor(m=>m.MyDate);
}
}
我正在寻找一个更好的选择来避免@if
以及重复的代码
编辑: 添加到@ W92答案。我们还需要更改模型绑定器以支持继承的模型。 否则,在此代码的视图中,MVC不会理解如何放置子属性。
答案 0 :(得分:1)
我完全不了解你的问题,但非常好,很抱歉任何错误。
public class Thing1Model()
{
public int type {get; set; }
public string Name {get; set;}
}
public class Thing2Model() : Thing1Model
{
public DateTime MyDate {get; set;}
}
并在您的View:// model2
中@using(Html.BeginForm(....))
{
@Html.PartialView("_myForm");
@Html.TextBoxFor(m=>m.MyDate);
}
和_myForm
有一个Thing1Model模型,内容为:
@Html.HiddenFor(m=>m.type);
@Html.LabelForI(m=>m.Name);
但是什么时候会在View(thing1)中,只使用:
@using(Html.BeginForm(...))
{
@Html.PartialView("_myForm");
}