【问题标题】:How can I share same action with two names on ASP.NET MVC Controller如何在 ASP.NET MVC 控制器上与两个名称共享相同的操作
【发布时间】:2018-02-12 09:23:35
【问题描述】:

情况是,我需要对 ASP.NET 控制器中的两个动作名称使用相同的方法。详细地说,说http://mydomain/Members/Indexhttp://mydomain/Members/Browse 的行为应该相同,或者,只有成员控制器具有与以下相同的方法:

public ActionResult Browse()
{
    var members = _dbContext.Members.ToList();

    return View("Browse", members);
}

目前,我正在使用两个名为“Browse”和“Index”的 ActionResult,其代码相同,但可能有更好的方法来执行此操作。我查看了属性,但 ActionName 属性并不能帮助我满足我的需要。此外,谷歌搜索给我提供了相同的方法但不同的 HTTP 请求类型方法重载示例的建议。非常感谢任何帮助。

【问题讨论】:

  • 为什么你不能只在控制器中创建一个私有方法并在 2 个动作中调用它?
  • Index 创建一个指向Browse - url: "Members/Index", defaults: new { controller = "Members", action = "Browse" } 的特定路由
  • 谢谢@StephenMuecke。我用过你的方法。
  • @maxs87 感谢您的建议伙伴

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


【解决方案1】:

我在控制器中使用了 Index 动作,并为 "Members/Browse" 添加了一个专属路由,以指向 " 的 "Index" 动作成员” 控制器。因为反过来,"Members/" 会出现 404 错误。

现在是控制器动作(示例):

public ActionResult Index()
{
    var members = _dbContext.Members.ToList();

    return View("Index", members);
}

现在在 RouteConfig 中定义的路由:

routes.MapRoute(
    name: "MemberBrowseRoute",
    url: "Members/Browse",
    defaults: new { Controller = "Members", Action = "Index" });

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 2011-12-19
    • 2018-07-15
    • 2011-01-27
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多