我有一个我的Asp.net MVC视图的模型结构:
public class MyModel{
public AnotherModel1 Prop1 {get;set;}
public AnotherModel2 Prop2 {get;set;}
}
public class AnotherModel1{
public InnerModel InnerProp1 {get;set;}
public InnerModel InnerProp2 {get;set;}
public InnerModel InnerProp3 {get;set;}
}
public class AnotherModel2{
public InnerModel InnerProp1 {get;set;}
public InnerModel InnerProp2 {get;set;}
}
public class InnerModel {
public string Input {get;set;}
}
这意味着,MyModel是传递给View的通用模型。其他一些模型是AnotherModel1,AnotherModel2,其中包含InnerModel作为属性。
我想创建一个知道如何渲染InnerModel的辅助函数。 然后在我的页面视图中,我希望能够编写类似的内容 @RenderInnerModel(m => m.Prop1.InnerProp1)
问题是,我不知道如何将htmlhelper传递给我的函数,以便能够在我的帮助器中使用@ Html.TextBoxFor(m => m.Input)。
虽然问题可以通过使用每个InnerModel的部分视图来解决,但我希望有参数化辅助函数,并且不想弄乱部分复杂模型,例如使用元组等。
修改
虽然EditorFor似乎几乎是我想要的,但我仍然想要理解是否有可能有像
这样的东西var modelHelper = new HtmlHelper<InnerModel>(ViewContext, this);
但是在MyModel的背景下?谢谢!
答案 0 :(得分:2)
你的控制器:
public class AnotherModel
{
public InnerModel InnerProp1 { get; set; }
public InnerModel InnerProp2 { get; set; }
}
public class InnerModel
{
public string Input { get; set; }
}
public class EditorExampleController : Controller
{
//
// GET: /EditorExample/
public ActionResult Index()
{
AnotherModel model = new AnotherModel();
model.InnerProp1 = new InnerModel { Input = "test 1" };
model.InnerProp2 = new InnerModel { Input = "test 2" };
return View(model);
}
}
你的观点:
@model MVCApp.Controllers.AnotherModel
<h2>Editor template</h2>
@Html.EditorFor(_ => _.InnerProp1)
@Html.EditorFor(_ => _.InnerProp2)
on&#34; shared&#34;文件夹在&#34;视图&#34;创建一个新的文件夹调用&#34; EditorTemplates&#34;,然后添加一个局部视图&#34; InnerModel.cshtml&#34; :
@model MVCApp.Controllers.InnerModel
@if (Model.Input == "test 2")
{
<h4>@Model.Input</h4>
}
else
{
<h2>@Model.Input</h2>
}
这是一个简单的实现,如果你想我可以发布自定义HtmlHelper