我正在建立一个状态机,根据某个动态值在页面上显示不同的动作控件(部分视图)。
我开始编写HtmlHelper扩展方法,为每个州输出正确的html。类似的东西:
@if(Model.state == "NEW") {
Html.RenderActionEdit()
Html.RenderActionDelete()
}
要做到这一点,我在表单中做了简单的方法:
return MvcHtmlString.Create("<form><input>..... </form>");
但这对于大量的html来说相当麻烦。所以,问题是,是否可以在单独的视图(cshtml文件)上编写此Html,然后以某种方式加载它们并将结果传递给MvcHtmlString?像
return MvcHtmlString.Create(View.Load("EditAction.csthml"));
我无法找到加载现有视图的方法,然后只是&#34;包含&#34;它在部分方法的输出上。
非常感谢您的帮助!
答案 0 :(得分:2)
有几种方法可以做到这一点:
@Html.RenderPartial("thepartial.cshtml", model);
会将model
传递给局部视图,然后进行渲染。还有其他几个版本。
@Html.Action("action", "controller", id)
(see msdn)会将id
传递给指定的操作方法,并呈现它输出的视图。如果您的主视图中没有部分可用的模型对象,这将非常方便。
在HtmlHelper的扩展方法中,您可以像这样使用它:
public HtmlString YourContent(this HtmlHelper helper)
{
return helper.Action("action", "controller", new { id = 1 });
}
在您的视图中将通过调用@Html.YourContent()
来使用。