将ASP.NET动作链接添加到ASP.NET MVC中的列表

时间:2009-10-15 14:31:52

标签: c# asp.net asp.net-mvc

我正在尝试为我的项目添加导航菜单,该菜单使用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',而不是我想要的链接。

感谢。

3 个答案:

答案 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>

可能不是最聪明的方法,但它确实有效。