【发布时间】:2017-09-01 06:00:30
【问题描述】:
我正在阅读 Routing Basics in ASP.NET MVC 的 MVC 路由是如何工作的。
上面写着
除了 {controller} 和 {action} 之外的其他 URL 参数是 可作为参数传递给选定的 Action 方法。
所以我创建了一个参数名称为controller 的动作string 类型。
public ActionResult About(string controller, string test)
{
ViewBag.Message = "Your application description page.";
return View();
}
当我看到 controller 的值时,它是 Home,这是我的控制器名称。
但是当我试图从这两个方法中访问时,它返回 null。 为什么?
-
Request.Params["controller"] Request.QueryString["controller"]
如果没有从上述方法中选取controller参数的值,那么从哪里获取controller值。
我使用此操作链接来调用操作。
<a href="@Url.Action("About", "home", new { controller ="Hello" , test ="Amit"})">Check</a>
【问题讨论】:
-
你所说的“控制器值”是什么意思?
-
@ihavenokia : 它是名为 About 的动作的参数名称
-
我在小提琴中查看并测试了上面给出的
Url.Action,链接帮助 URL 转换为/Home/About?test=Amit,忽略了Hello字符串(但奇怪的是Hello在操作方法中成功捕获)。似乎Request.Params["test"]和Request.QueryString["test"]分配结果为Amit字符串。 -
这是预期的行为。在构建 url 时,
controllerName和actionName参数的值将与您的routeValues参数合并。controllerName值会覆盖您的 `routeValues.xml 中的controller值。您可以检查source code here -
如果你省略了
controllerName-@Url.Action("About", new { controller ="Hello" , test ="Amit"})",你会看到它会生成../Hello/About?test=Amit,这会导致404(假设你没有HelloController
标签: c# asp.net asp.net-mvc asp.net-mvc-4 routing