我有一个Asp.Net MVC应用程序,我希望Home\Index
控制器操作采用一个可选参数,服务器将使用该参数来决定返回哪个视图。
所以我定义了以下路线:
routes.MapRoute(
name: "LogOn",
url: "logon/{id}",
defaults: new {controller = "Home", action = "LogOn", id = UrlParameter.Optional}
);
routes.MapRoute(
name: "register",
url: "register/{id}",
defaults: new {controller = "Home", action = "Register", id = UrlParameter.Optional}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
这些路线允许我通过不必指定Home
控制器来简化我的网址,因此mysite/Home/logon
之类的网址被简化为mysite/logon
。 / Index操作,其中所有未解析的URL看起来像这样:
public ActionResult Index(string id="")
{
if (id.Contains("App"))
return View("AppView")
return View();
}
问题
当我将localhost/#app/41
发送到我的服务器时,我希望id
为#app/41
但不是。{0}。 id
始终设置为空。
我的路线定义是否有错误/缺失?
答案 0 :(得分:3)
您不能使用Fragement identifier作为查询字符串值,因为片段标识符根本没有发送到服务器,它仅供浏览器使用(主要用于Anchor links })。
如果您坚持使用#
,则必须先对其进行编码,但这看起来并不像您期望的那样漂亮。
答案 1 :(得分:1)
#
不是可接受的查询字符串字符。如果要将#
作为查询字符串参数传递,则应将其编码为%23
。您的正确网址应该类似于
localhost/?id=%23app/41