![](/img/trans.png)
[英]AJAX call in ASP.NET MVC application not calling Action method
[英]Call an action method from layout in ASP.NET MVC
我有一個布局和一個局部視圖,它們在共享文件夾中。 部分視圖顯示非靜態的頂級菜單項。 所以我需要調用一個action方法來從數據庫中獲取菜單項。 為此,我創建了一個控制器並在其中添加了一個動作方法。
當我嘗試在Web瀏覽器中瀏覽頁面時,發生此錯誤:
未找到路徑'/'的控制器或未實現IController。
注意:我也嘗試了Html.RenderAction,Html.Partial方法......我嘗試創建另一個視圖文件夾,並創建一個新的局部視圖和以“文件夾名稱+控制器”后綴命名的新控制器。
布局:
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
</head>
<body>
<div id="header">
@Html.Action("~/Views/Shared/_TopMenu.cshtml", "LayoutController", new {area =""}); //Here is the problem.
</div>
<div>
@RenderBody();
</div>
</body>
</html>
_TopMenu.cshtml:
@model IList<string>
@foreach (string item in Model)
{
<span>item</span>
}
LayoutController(在Controllers文件夾中):
public class LayoutController : Controller
{
//
// GET: /Shared/
public ActionResult Index()
{
return View();
}
[ChildActionOnly]
[ActionName("_TopMenu")]
public ActionResult TopMenu()
{
IList<string> menuModel = GetFromDb();
return PartialView("_TopMenu", menuModel);
}
}
如果你把它放在你的視野中會發生什么?
@{ Html.RenderAction("TopMenu", "Layout"); }
(並注意這一切,直到一切正常:// [ChildActionOnly])
改變這一行,
@Html.Action("~/Views/Shared/_TopMenu.cshtml", "LayoutController", new {area =""});
至,
@Html.Action("_TopMenu", "Layout", new {area =""});
並檢查。
存在不同的方式,對於這種情況我喜歡在布局中使用html.action,並且在控件中我將創建一個字符串Menu,該字符串包含我需要的html代碼,控制器結束時返回Content(菜單);
例如
布局:
<body>
<nav>
@Html.Action("_TopMenu", "Layout")
</nav>
控制器
public class LayoutController : Controller
{
public ActionResult _TopMenu()
{
IList<string> menuModel = GetFromDb();
string menu = "<ul>";
foreach(string x in menuModel)
{
menu +="<li><a href='"+x+"'>+x+"</a></li>";
}
menu+="</ul>";
return Content(menu);
}
}
我喜歡這樣,因為我可以使用很多選項來創建菜單dinamics更復雜。
另一種方法是使用ajax恢復數據並使用把手或其他模板代碼
我就是這樣做的:
布局
@Html.Action("GetAdminMenu", "AdminMenu")
管理菜單控制器
public PartialViewResult GetAdminMenu()
{
var model = new AdminMenuViewModel();
return PartialView(model);
}
GetAdminMenu.cshtml
@model ReportingPortal.Models.AdminMenuViewModel
<div class="form-group">
<label class="col-md-4 control-label" for="selectbasic">School Name</label>
<div class="col-md-8">
@Html.DropDownListFor(model => model.SelectedID, new SelectList(Model.DataList, "Value", "Text", Model.SelectedID), "", new { @class = "form-control", @required = "*" })
</div>
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.