我有一个登录页面。在我的web.config中,我设置了一个loginUrl,以便如果用户尝试访问“授权”页面并且未被授权,他们将被重定向到登录页面。Asp.net MVC在查询字符串中传递参数时遇到问题
现在我注意到,发生这种情况时,用户从“授权”页面重定向,他们从重定向页面中的网址获取追加到登录网址。
这样,当他们进行登录时,我可以使用它,我可以将它们发送回他们试图获取的页面。
所以这是地址是什么样子:
http://localhost:2505/CMS_Account/LogOn?ReturnUrl=%2fCMS_Home%2fIndex
所以我试图捕捉RETURNURL查询字符串的一部分,在我看来,一个参数。
但我无法得到它的工作。
于是我发现,如果我改变我的表格登录这个:
<% using (Html.BeginForm()) ........
然后我可以捕捉由于某种原因没有问题RETURNURL。
但是我怎么也得是正确的,现在我有这样的:
<% using (Html.BeginForm("Login","Authentication",FormMethod.Post,new { id = "frm_Login"})) .....
有一次,我尝试将参数传递到BeginForm停止捕获RETURNURL。
我不知道它为什么会停下来。有人说这是因为我使用的是默认路由,不知怎么的,如果你不把任何东西放在beingForm中,神奇地可以找出带有默认url的ReturnUrl。
不久,当你在BeginForm中放置一些东西时,它似乎变得笨拙,你需要给它一条路径来告诉它该做什么。
虽然我不知道如何写这条路线。我尝试了很多不同的组合,他们都失败了,每个告诉我一条路线的人都不会告诉我它应该是什么样子。
所以我不知道该怎么尝试了。
我试过
routes.MapRoute(
"CMS_Account", // Route name
"CMS_Account/{action}/{ReturnUrl}", // URL with parameters
new { controller = "CMS_Account", action = "LogOn",} // Parameter defaults
);
routes.MapRoute(
"CMS_Account", // Route name
"CMS_Account/{action}/{ReturnUrl}", // URL with parameters
new { controller = "CMS_Account", action = "LogOn", ReturnUrl = ""} // Parameter defaults
);
routes.MapRoute(
"CMS_Account", // Route name
"{controller}/{action}/{ReturnUrl}", // URL with parameters
new { controller = "CMS_Account", action = "LogOn", ReturnUrl = ""} // Parameter defaults
);
routes.MapRoute(
"CMS_Account", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "CMS_Account", action = "LogOn", id = ""} // Parameter defaults
);
routes.MapRoute(
"CMS_Account", // Route name
"{controller}/{action}/", // URL with parameters
new { controller = "CMS_Account", action = "LogOn"} // Parameter defaults
);
嗯IC I有2个的ActionResult方法之一是: //公众的ActionResult登录() // {// 返回查看(); //} then another actionResult with same name,but it has [AcceptVerbs(HttpVerbs.Post)],所以我注释掉了上面的一个,并拿走了Post,它现在可以工作。 我不明白为什么如果你使用强制一个POST它不能抓住查询字符串,但在同一时间,如果我离开没有参数的形式,并有我离开它的一切(即有Post属性的方法)。 它工作得很好。 – chobo2 2009-06-14 11:34:27
所以没有办法解决这个问题?其他然后你发布它只是看起来很愚蠢,他们只是让方式只允许帖子和东西,但如果你指定它是这样的 <%使用(Html.BeginForm(“登录”,“身份验证”,FormMethod.Post, new {id =“frm_Login”}))..... 它突然间想不出来。但是如果BeginForm是空白的,它会以某种方式找到标记为“Post”的ActionResult并仍然获取ReturnUrl。 然后我不能相信这不像是我读过的书或者像这样的教程对我来说看起来像是很多人会做的事情。 – chobo2 2009-06-14 11:38:43
我其实没有明确指出这些东西的优点是什么? 就像为什么麻烦写了所有额外的东西,像我写的? <%使用(Html.BeginForm(“Login”,“Authentication”,FormMethod.Post,new {id =“frm_Login”}))..... 其他那么也许如果你想给它一个“ ID“或什么的。 看起来像留下空白让你更多的好处,你仍然可以标签ActionResults“发布”或“获取”,它仍然可以找到它。 PS这个字符的限制真的是同性恋....... – chobo2 2009-06-14 11:40:48