mvc路由共享相同的动作?

时间:2009-10-25 19:28:59

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

我在MVC应用程序中定义了以下两个路由。 目前我有两个“MVC View内容页面”定义

/ShowName/NameById
/ShowName/Index

但是这两页的内容是一样的吗?两条路线可以共享同一内容页面吗?如果没有,那么我可以a)为两条路线创建单一规则或b)我应该创建一个usercontrol以在两个内容页面之间共享以显示我的数据吗?

    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)

以下是url的工作吗?

/Name/Charley
/Name/Charley/11234

2 个答案:

答案 0 :(得分:1)

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

return View("DetailView", model);

但是这可以引入一个额外的字符串来管理两个控制器动作。由于MVC不支持按操作名称重载(除非你有一个GET / POST对,一个没有参数),你可以在使用之前检查{nameId}参数并查看它是否为空/ null。

答案 1 :(得分:0)

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

Name/{theName}/{nameId}

并使 nameId 成为您的操作的可空输入。然后只需在您的操作中添加一些逻辑,检查nameId是否具有值并相应地执行操作。