使用模型和htmlhelper渲染部分视图

时间:2009-12-10 16:22:53

标签: asp.net-mvc html-helper

ASP .NET MVC 1

我想基于一个模型显示一个局部视图,我希望它有一个相当短的命令。所以我看到了一种使用HtmlHelper和控制器的方法(我会使用另一个控制器,而不是当前使用的控制器)。

但不知何故,它仍会出现错误,但我认为该方法开始看起来应该如此。

那么我做错了什么? (如果我直接在ASPX页面中调用该方法,它会成功。但是应该可以使用HtmlHelper。)

public static void RenderPartialView(this HtmlHelper html, string action, string controller, object model)
{
    var context = html.ViewContext;
    RouteData rd = new RouteData(context.RouteData.Route, context.RouteData.RouteHandler);
    rd.Values.Add("controller", controller);
    rd.Values.Add("action", action);
    rd.Values.Add("model", model);
    IHttpHandler handler = new MvcHandler(new RequestContext(context.HttpContext, rd));
    handler.ProcessRequest(System.Web.HttpContext.Current);
}

参与ASCX页面:

<% Html.RenderPartialView("Show", "Intro", Model.Intro); %>

给出的错误: 'System.Web.Mvc.HtmlHelper'不包含'RenderPartialView'的定义,并且没有可以找到接受类型'System.Web.Mvc.HtmlHelper'的第一个参数的扩展方法'RenderPartialView'(你是否缺少using指令)或汇编参考?)

3 个答案:

答案 0 :(得分:3)

为什么不使用Html.RenderPartial?这是渲染局部视图的正确方法。无需另外提出要求。

<% Html.RenderPartial("Show", Model.Intro); %>

当您以“非静态”方式使用扩展方法时(例如,方法属于某个实例),您的调用不会成功,您必须省略第一个参数。正确的电话会是

<% Html.RenderPartialView("Show", "Intro", Model.Intro); %>

希望有所帮助

和Cédric

答案 1 :(得分:1)

添加

<add namespace="Namespace-Of-RenderPartialView-Class"/>

到你的web.config文件。

答案 2 :(得分:0)

使用扩展方法,您不需要包含第一个参数(“this HtmlHelper html”)。这是由编译器在使用扩展方法时处理的。它是根据您调用方法的对象推断的。