2009-12-10 72 views
2

ASP .NET MVC 1渲染與模型和的HtmlHelper局部視圖

我想在模型上顯示的局部視圖的基礎上,和我想的是具有用於該一個相當短的命令。所以我看到了一種使用HtmlHelper和一個控制器的方法(並且我會使用另一個控制器,而不是當前使用的控制器)。

但不知何故,它仍然給出了一個錯誤,但我認爲該方法開始看起來應該如此。

那麼我做錯了什麼? (如果我直接在ASPX頁面中調用方法,它會成功,但應該可以使用HtmlHelper)。在ASCX頁

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

部分:

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

錯誤給出: 'System.Web.Mvc.HtmlHelper' 不包含一個定義爲 'RenderPartialView',沒有擴展方法 'RenderPartialView'接受類型'System.Web.Mvc.HtmlHelper'的第一個參數可以找到(你是否缺少使用指令或程序集引用?)

回答

1

添加

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

到你的web.config文件。

0

使用擴展方法,不需要包含第一個參數( 「這個HtmlHelper html」)。當使用擴展方法時,由編譯器處理。它根據你調用方法的對象來推斷。

+0

你說得對,但它沒有任何傷害。同樣的問題,當我離開這個論點。我調整了文字。 – Johan 2009-12-10 16:45:56

3

爲什麼不使用Html.RenderPartial?這是渲染局部視圖的正確方法。無需再提出其他請求。

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

當你在「非靜態」方式使用擴展方法(即,彷彿該方法屬於一個實例),您的電話不東陽成功,你必須忽略第一個參數。正確的通話將

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

希望它可以幫助

塞德里克

+0

嗯,我想有另一個控制器的局部視圖。 RenderPartial僅適用於當前控制器,對嗎? – Johan 2009-12-10 16:46:44

+0

該死的,我應該把它放在共享文件夾中。這有用,謝謝。 – Johan 2009-12-10 17:02:58

+0

可以使用相對視圖名稱; o) – 2009-12-10 17:03:56