![](/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.