【问题标题】:Rendering partial views with a model and htmlhelper使用模型和 htmlhelper 渲染部分视图
【发布时间】:2009-12-10 16:22:53
【问题描述】:

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 指令还是程序集参考?)

【问题讨论】:

    标签: asp.net-mvc html-helper


    【解决方案1】:

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

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

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

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

    希望对你有帮助

    塞德里克

    【讨论】:

    • 嗯,我想要另一个控制器的局部视图。 RenderPartial 只适用于当前控制器,对吧?
    • 该死,我应该把它放在共享文件夹中。这行得通,谢谢。
    • 可以使用相对视图名称;o)
    【解决方案2】:

    添加

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

    到您的 web.config 文件。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你是对的,但这并没有什么坏处。当我离开那个论点时,同样的问题。我调整了文字。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多