首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC 4中,ReturnUrl QueryString始终为空

在MVC 4中,ReturnUrl QueryString始终为空
EN

Stack Overflow用户
提问于 2012-11-22 02:24:46
回答 3查看 8.1K关注 0票数 3

我有一个使用get方法登录的action方法:

代码语言:javascript
复制
public virtual ActionResult LogIn()
{
    return View();
}

以及在Ajax中使用Ajax.BeginForm()调用Post的post方法的操作方法,如:

代码语言:javascript
复制
[HttpPost]
[AjaxOnly]
[ValidateAntiForgeryToken]
public virtual ActionResult LogIn(LogInViewModel loginInfo, string returnUrl)
{
   ...
}

但returnUrl始终为空!

我使用MVC4。

此问题的原因是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-22 02:47:24

您必须将returnUrl发送回服务器。例如,您的登录表单应将returnUrl作为参数:

代码语言:javascript
复制
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
    ....
    <input type="submit" value="Log in" />
}

之前在您的登录操作中保存在服务器端,在查询字符串中传入ReturnUrl的情况下使用AuthorizeAttribute调用:

代码语言:javascript
复制
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}
票数 8
EN

Stack Overflow用户

发布于 2014-03-18 18:29:04

不确定您的视图是什么样子,但如果您有以下内容:

代码语言:javascript
复制
@using (Html.BeginForm())
{
}

...then returnUrl应该有一个填充的值,如果它来自另一个url的话。

在我的场景中,它总是空的,我假设它可能和你做的是一样的。我是这样想的:

代码语言:javascript
复制
@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { role = "form" }))
{
}

我所做的就是把它改成这样:

代码语言:javascript
复制
@using (Html.BeginForm("LogOn", "Account", new { returnUrl = Request.QueryString["ReturnUrl"] }, FormMethod.Post, new { role = "form" }))
{
}

returnUrl现在有一个我可以使用的值。

票数 3
EN

Stack Overflow用户

发布于 2013-05-04 02:05:40

在continue for Completion @Jaroslaw Waliszko的好答案中,这个问题的原因是:

因为我们使用ajax请求提交表单,所以不显眼的ajax使用

代码语言:javascript
复制
$("form").serialize();

对于这个表单,在这种情况下(使用ajax),ReturnUrl (和任何其他参数)不发送到服务器,只有表单输入元素发送到服务器,所以MVC Auto ModelBinding不绑定ReturnUrl,我们必须在这种状态下使用@Jaroslaw Waliszko解决方案。

serialize

将一组表单元素编码为字符串以供提交。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13499677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档