【发布时间】:2017-03-21 20:17:56
【问题描述】:
当尝试将参数传递给简单控制器时,我收到的参数始终为空。
控制器
public class GetOrgController : Controller
{
private DirectoryEntities de;
public getOrgController()
{
de = new DirectoryEntities();
}
// GET: getOrg
public ActionResult Index(string district)
{
getorg_Result org = de.getorg(district).FirstOrDefault();
return View(org);
}
}
当我尝试使用参数localhost:660366/GetOrg/Index/D123 导航到该网址时,区域变量始终为null。
我想也许它必须对默认的RouteConfig 做点什么。当我在默认路由配置之前放置一个新值时,它起作用了!但是现在,每当我尝试启动应用程序时,它都会首先转到GetOrgController。当我想要一个具有不同参数的新控制器时会发生什么?我必须每次都这样做吗?这是我的新 RouteConfig 和新条目。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "GetOrg",
url: "{controller}/{action}/{district}",
defaults: new { controller = "GetOrg", action = "Index", district = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
实际上,我最初是在 Web Api 2 中开始使用 Rest,但视图模型将我吸引到 MVC。在方法上方指定我想要的路由/参数要容易得多,如下所示。这在 MVC 中可行吗?
WebApi2
[Route("Index/{district}")]
public ActionResult Index(string district)
{
getorg_Result orgs = de.getorg(district).FirstOrDefault();
return View(orgs);
}
上述方法似乎比必须依赖RouteConfig中正确的控制器顺序更简洁
【问题讨论】:
-
为什么不直接命名地区 ID?
-
...I wanted like below. Is this possible in MVC?MVC 5 Routing Attribute。 -
就像@ErikPhilips 下面回答的那样,您的 2 条路线相互冲突。它们完全相同,第一个被击中的将是定义列表中的第一个。
-
不要被愚弄,您可以简单地切换到
RouteAttribute,现在订单神奇地无关紧要,因为它仍然如此。
标签: c# asp.net-mvc