我在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
答案 0 :(得分:1)
您可以为页面的详细信息区域创建局部视图,保持两个操作的分离,以防它们在以后更改。或者你可以
return View("DetailView", model);
但是这可以引入一个额外的字符串来管理两个控制器动作。由于MVC不支持按操作名称重载(除非你有一个GET / POST对,一个没有参数),你可以在使用之前检查{nameId}参数并查看它是否为空/ null。
答案 1 :(得分:0)
你真的需要两条不同的路线吗?您可以为索引路径制作模式
Name/{theName}/{nameId}
并使 nameId 成为您的操作的可空输入。然后只需在您的操作中添加一些逻辑,检查nameId是否具有值并相应地执行操作。