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指令)或汇编参考?)
答案 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”)。这是由编译器在使用扩展方法时处理的。它是根据您调用方法的对象推断的。