ASP.NET MVC3以编程方式在扩展方法上导入视图内容

时间:2011-03-28 00:33:19

标签: c# asp.net-mvc-3

我正在建立一个状态机,根据某个动态值在页面上显示不同的动作控件(部分视图)。

我开始编写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;它在部分方法的输出上。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

  1. @Html.RenderPartial("thepartial.cshtml", model);会将model传递给局部视图,然后进行渲染。还有其他几个版本。

  2. @Html.Action("action", "controller", id) (see msdn)会将id传递给指定的操作方法,并呈现它输出的视图。如果您的主视图中没有部分可用的模型对象,这将非常方便。

  3. 在HtmlHelper的扩展方法中,您可以像这样使用它:

    public HtmlString YourContent(this HtmlHelper helper)
    {
        return helper.Action("action", "controller", new { id = 1 });
    }
    

    在您的视图中将通过调用@Html.YourContent()来使用。