2012-02-08 88 views
1

我希望使用MVC和renderpartial來生成一個菜單,但是無法讓它正常工作,而且從我看來,似乎RenderAction可能更適合。但我還沒有得到它的工作。MVC中RenderAction的問題3

我打算做的就是創建一個控制器,選擇從將作爲類行爲(這是投入的HomeController)一個數據庫中的某些文章:

public ActionResult MenuController() 
    { 
     var movies = from m in db.Art 
        where m.ArtikelNr.StartsWith("Webcat") 
        select m; 
     return View(movies); 
    } 

,然後發送信息到一個視圖:

@model IEnumerable<xxxx.Models.Art> 
@{ 
Layout = null; 
} 

<ul> 
@foreach (var item in Model) 
{ 
<li>@Html.DisplayFor(modelItem => item.Benämning_10)</li> 
} 

這工作時,我只要運行它作爲一個正常的控制器和視圖,它返回的我想要的清單。但是,如果我想從_layout.cshtml調用它(因爲此菜單應該會出現在每一頁上)這樣的:

<div id="sidebar">@Html.RenderAction(MenuController)</div> 

然後,它會生成以下錯誤:

CS0103: The name 'MenuController' does not exist in the current context 

什麼是正確的方法從_layout.cshtml文件中調用動作/視圖/任何內容?

回答

1

你應該叫

@Html.RenderAction("_MenuController") 

,並確保你有你的Global.asax

工作規則作爲另一個答案建議將是更好的使用

return PartialView(); 

我也建議你使用ChildActionOnlyAttribute是確保這一行動永遠不會被稱爲標準行動。

所以這樣的事情:

[ChildActionOnly] 
public PartialViewResult _MenuController() 
{ 
    var movies = from m in db.Art 
       where m.ArtikelNr.StartsWith("Webcat") 
       select m; 
    return PartialView(movies); 
} 
+0

感謝您提供這些提示,我已經實現了它們(仍然出現錯誤CS1502),但是在global.asax中有一個工作規則是什麼意思?規則是什麼? – Dennis 2012-02-08 11:38:08

+1

我只想說我現在能夠正常工作,出於某些原因,除非它是這樣鍵入的,否則任何人都可以向我解釋爲什麼這會起作用?'

' – Dennis 2012-02-08 12:02:32

+0

對於global.asax,我建議在修改標準規則(/ {controller}/{action}/{id})時確保遵守規則,否則將無法找到該操作。對於第二個技巧,你正在完成一項功能。尋找更多信息http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx – Iridio 2012-02-08 13:42:47

0

只需

@ Html.RenderAction( 「MenuController」)

你忘了在你的字符串參數報價

+0

謝謝,這是真的,有點尷尬。但仍然現在會產生另一個錯誤:CS1502:'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'的最佳重載方法匹配'有一些無效的參數 – Dennis 2012-02-08 11:25:25

0
<div id="sidebar">@Html.RenderAction("_MenuController")</div> 

在你的動作名稱行情:)它也可能是很好的做法,返回一個局部視圖:

return PartialView(movies); 
1
@{Html.RenderAction("MenuController");} 

@Html.Action("MenuController")