代码之家  ›  专栏  ›  技术社区  ›  Rippo

MVC路由共享相同的操作?

  •  0
  • Rippo  · 技术社区  · 15 年前

    我的MVC应用程序中定义了以下两条路线。- 目前我已经定义了两个“mvc视图内容页”

    /ShowName/NameById
    /ShowName/Index
    

    但是这两页的内容是一样的?两个路由是否可以共享同一个内容页?如果不是,那么我可以为两条路线或B创建一条单独的规则吗?我是否应该创建一个USER控件来在两个内容页之间共享来显示我的数据?

        routes.MapRoute(
           "NameById",
           "Name/{theName}/{nameId}",
            new
            {
                action = "NameById",
                controller = "ShowName",
                theName = "Charley"
            }
            ,new { nameId = @"\d+" }
       );
    
        routes.MapRoute(
           "ShowName",
           "Name/{theName}",
            new
            {
                action = "Index",
                controller = "ShowName",
                theName = "Charley"
            }
       );
    

    编辑 我已经阅读了下面的答案,我有以下的行动结果方法。如果我删除其中一个方法(例如索引),那么如何将路由重写为单个路由?

    public ActionResult Index(string theName)
    public ActionResult NameById(string theName, int? nameId)
    

    所以下面的工作网址的工作?

    /Name/Charley
    /Name/Charley/11234
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   pmarflee    15 年前

    你真的需要两条不同的路线吗?你可以为你的索引路径创建模式

    Name/{theName}/{nameId}
    

    并使 名字命名 可为空的操作输入。然后在操作中添加一些逻辑,检查nameid是否有值并相应地执行操作。

        2
  •  1
  •   Chris Patterson    15 年前

    您可以为页面的详细信息区域创建一个局部视图,保持两个操作的分离,以防它们在以后的某个时间发生更改。或者你可以

    return View("DetailView", model);
    

    但是,这可以引入一个额外的字符串来管理两个控制器操作。由于mvc不支持按操作名重载(除非您有一个get/post对,一个没有参数的对),所以您可以在使用前检查{nameid}参数,看看它是空的还是空的。