【发布时间】:2016-01-19 16:51:21
【问题描述】:
尝试开始使用 ASP.NET MVC。
我在设置基本路线时遇到了一些困难。
我的路线如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "ImproItem",
url: "{controller}/{action}/{type}",
defaults: new { controller = "ImproItemForm", action = "Index", type = UrlParameter.Optional }
);
}
我的观点是:
<li>@Html.ActionLink("linkLabel", "Index", "ImproItemForm", new { type = "blablabla" }, null)</li>
我的控制器动作信号是:
public class ImproItemFormController : Controller
{
...
public ActionResult Index(String t)
{
...}
}
视图生成以下 HTML:
<li><a href="/ImproItemForm?type=blablabla">linkLabel</a></li>
这对我来说看起来不错。 但是,此链接正确调用控制器的操作(使用 ImproItem 路由),但它没有传递 blablabla 参数。调试应用时参数 t = null。
你能解释一下为什么吗? 我应该改变什么才能正确接收 blablabla 论点?
现在如果我启动应用程序并尝试浏览
当我浏览时是否正常: http://localhost:55193/ImproItemForm/Index?id=foobar 它确实调用了 ImproItemFormController.Index(String t) 方法? 我没想到这个 URL 会和这个路由匹配:
routes.MapRoute(
name: "ImproItem",
url: "{controller}/{action}/{type}",
defaults: new { controller = "ImproItemForm", action = "Index", type = UrlParameter.Optional }
);
我认为参数需要与路由中的名称相同:type 而不是 id。
提前感谢您的帮助。
【问题讨论】:
-
type不是t。将方法更改为ActionResult Index(String Type)或将链接参数更改为new { t = "blablabla" }(在这种情况下,路由需要是`url:“{controller}/{action}/{t}”,
标签: asp.net asp.net-mvc razor html.actionlink