C# MVC新手-如何创建具有控制器链接的视图?

C# MVC新手-如何创建具有控制器链接的视图?,c#,asp.net-mvc-2,.net-4.0,C#,Asp.net Mvc 2,.net 4.0,这当然是一个基本的问题,但我对MVC(和ASP.NET)还不够了解,我甚至不知道如何在不解释的情况下提问 我希望母版页上有一个选项卡,用于加载带有指向其他视图的链接的视图。其目的是创建一个“管理”视图,其中包含指向各种控制器/操作/视图的链接(操作链接?),以维护我的数据库的主表。所有这些都将通过授权过滤器进行保护 所以,主标签会显示Admin。这将加载一个视图,其中包含指向TableA、TableB等的控制器/视图的操作链接。单击其中一个链接应将我带到视图,在该视图中我可以对该特定表执行CRU

这当然是一个基本的问题,但我对MVC(和ASP.NET)还不够了解,我甚至不知道如何在不解释的情况下提问

我希望母版页上有一个选项卡,用于加载带有指向其他视图的链接的视图。其目的是创建一个“管理”视图,其中包含指向各种控制器/操作/视图的链接(操作链接?),以维护我的数据库的主表。所有这些都将通过授权过滤器进行保护

所以,主标签会显示Admin。这将加载一个视图,其中包含指向TableA、TableB等的控制器/视图的操作链接。单击其中一个链接应将我带到视图,在该视图中我可以对该特定表执行CRUD操作。我已经构建了这些,但是我正在使用Shared/Site.Master视图访问每个表,为每个表创建一个单独的选项卡——这不太好

我设想一个垂直的可点击表名列表

这够清楚吗?我甚至不知道我在这里需要用什么术语

谢谢,
Dave

因此,建议您尽快阅读NerdDinner教程,它涵盖了所有基础知识

听起来您需要的是一个AdminController。其索引操作将返回一个视图。它的视图文件是放置ActionLink的位置

母版页,则只需调用

@Html.ActionLink("Admin", "index", "admin");

假设你还没有弄糟w/路由,那么这应该会生成你正在寻找的链接。

这里是一个基于扩展方法的强类型操作链接的想法

public IHtmlString ActionLink<T>(this HtmlHelper htmlHelper, Expression<Action<T>> action, string linkText) where T : Controller
{
  var methodCall = action.Body as MethodCallExpression;
  if (methodCall == null)
    throw new ArgumentException("Action must be a method call", "action");

  var actionName = methodCall.Method.Name;
  var controllerName = GetControllerName(typeof(T));

  return htmlHelper.ActionLink(linkText, actionName, controllerName);
}

public static string GetControllerName(Type controllerType)
{
  return controllerType.Name.Substring(0, controllerType.Name.Length - "Controller".Length);
}
public IHtmlString ActionLink(此HtmlHelper、表达式操作、字符串链接文本),其中T:Controller
{
var methodCall=action.Body作为MethodCallExpression;
if(methodCall==null)
抛出新ArgumentException(“操作必须是方法调用”、“操作”);
var actionName=methodCall.Method.Name;
var controllerName=GetControllerName(typeof(T));
返回htmlHelper.ActionLink(linkText、actionName、controllerName);
}
公共静态字符串GetControllerName(类型controllerType)
{
返回controllerType.Name.Substring(0,controllerType.Name.Length-“Controller.Length”);
}
然后你可以用这种方式:

@Html.ActionLink<HomeController>(c => c.Index(), "My Home Index")
@Html.ActionLink(c=>c.Index(),“我的家索引”)
请注意,这只是一个想法,尚未测试


希望这能有所帮助。

我强烈推荐T4MVC作为参考资料。它允许您以强类型的方式表示到操作或视图的路由和链接,这使得重构更加容易。T4MVC总体上是一个胜利,但有时有点古怪。这篇博文中的策略很有帮助:@Morten:完全同意,T4MVC是核心框架中应该如何进行链接的,很遗憾它是一个IDE插件。我已经阅读了好几次NerdDinner教程,这就是我目前所知道的。这可能比我想完成的要简单,我只是还没有“摸索”它。感谢T4MVC的建议,我会继续跟进。