我正在尝试为我的项目添加导航菜单,该菜单使用ASP.NET框架和C#编程语言。我的解决方案是创建一个窗口小部件,可以在从母版页调用时填充局部视图。 在widget的action方法中,如何向ViewDataDictionary添加Links或Controller-Action组合?
---编辑:这是我的代码,在您的建议之后
public class NavController : Controller
{
public ActionResult Menu()
{
List<ActionLink> navLinks = new List<ActionLink>();
navLinks.Add(new ActionLink() { Text = "Home", ActionName = "Index", ControllerName = "Home" });
return View(navLinks);
}
}
部分视图文件如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<Microsoft.Web.Mvc.Controls.ActionLink>>" %>
<% foreach(var link in Model) { %>
<%= link %>
<%} %>
但所有这些的输出只是'Microsoft.Web.Mvc.Controls.ActionLink',而不是我想要的链接。
感谢。
答案 0 :(得分:2)
actionlink是某种类型的mvc控件,它是解析标记的结果,然后会被添加到页面的控件集合中。
您有2个选项可以实现您的目标,传递完整的链接(即完全形成的锚标记),您可以使用Html.ActionLink(linkText,actionName)在控制器中生成链接,或将链接的详细信息传递给您partial并使用这些细节生成链接(即传递包含链接详细信息的元素的枚举)。
我个人更喜欢第二种方法,因为它将导航逻辑与渲染分开。
代码中的某个地方......
public class NavigationLink
{
public string Text;
public string Controller;
public string Action;
// ... any other properties you want to pass
}
你控制器的某个地方......
public ActionResult Menu
{
var links = new List<NavigationLink>
{
new NavigationLink
{
Text = "Home",
Controller = "Home",
Action = "Index"
},
new NavigationLink
{
Text = "Logout",
Controller = "Authentication",
Action = "Logout"
}
};
return View( links );
}
在你看来的某个地方......
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<NavigationLink>>" %>
<% foreach(var link in Model) { %>
<%= Html.ActionLink( link.Text, link.Action, link.Controller ) %>
<%} %>
答案 1 :(得分:0)
这是你要找的吗?
List<ActionLink> actions = new List<ActionLink>(); //or = ViewData["actions"] for adding
actions.Add(new ActionLink() { ActionName = "actionname", ControllerName = "controller" });
ViewData["actions"] = actions;
答案 2 :(得分:0)
好的,我通过将ViewData直接添加到字典中找到了一种简单的方法。
public ActionResult Menu()
{
ViewData.Add("one", "<a href=\"../Home/Index\">Home</a>");
ViewData.Add("two", "<a href=\"../Account/LogOff\">Log Off</a>");
return View();
}
在局部视图中:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<ul>
<% foreach (KeyValuePair<string, object> pair in ViewData) { %>
<li>
<%=pair.Value %>
</li>
<%} %>
</ul>
可能不是最聪明的方法,但它确实有效。