ASP.NET MVC3以扩展方法编程导入视图内容
问题描述:
我正在构建一个状态机,它根据某些动态值在页面上显示不同的动作控件(局部视图)。ASP.NET MVC3以扩展方法编程导入视图内容
我开始编写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"));
我找不到一种方法来加载现有的视图,然后只是“包括”在部分方法的输出。
非常感谢您的帮助!
答
有几个方法可以做到这一点:
@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()
使用。
嗯,我明白了,但是我不能从扩展方法调用Html.RenderPartial,因为它是一个实例方法。我知道我可以直接从视图中调用它们,但我想从扩展方法中尝试它! – tggm 2011-03-28 01:05:49
@Tiago:嗯,你正在扩展HtmlHelper,对吧? – 2011-03-28 20:56:30
对不起,我不是很清楚。我将其标记为已回答。我的问题是,我正在HtmlHelper之外编写这些帮助器方法(即常规方法不是扩展方法)。正如你所指出的,我意识到这只能作为HtmlHelper的扩展。 – tggm 2011-03-29 01:37:22