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")); 

我找不到一种方法来加载现有的视图,然后只是“包括”在部分方法的输出。

非常感谢您的帮助!

有几个方法可以做到这一点:

  1. @Html.RenderPartial("thepartial.cshtml", model);将通过model的局部视图,并呈现它。还有一些其他版本。

  2. @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()使用。

+0

嗯,我明白了,但是我不能从扩展方法调用Html.RenderPartial,因为它是一个实例方法。我知道我可以直接从视图中调用它们,但我想从扩展方法中尝试它! – tggm 2011-03-28 01:05:49

+0

@Tiago:嗯,你正在扩展HtmlHelper,对吧? – 2011-03-28 20:56:30

+0

对不起,我不是很清楚。我将其标记为已回答。我的问题是,我正在HtmlHelper之外编写这些帮助器方法(即常规方法不是扩展方法)。正如你所指出的,我意识到这只能作为HtmlHelper的扩展。 – tggm 2011-03-29 01:37:22