如何在使用Ajax.ActionLink时手动设置returnURL

时间:2012-07-09 02:30:59

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我有这个链接

@Ajax.ActionLink("create poll question", 
                 "CreatePoll", 
                 new { id = Model.DebateID }, 
                 new AjaxOptions
                 {
                   UpdateTargetId = "poll-entry-box",
                   InsertionMode = InsertionMode.Replace,
                   HttpMethod = "GET"
                 })

指向具有[Authorize]属性的动作。登录有效,但returnURL为空,因此它只是重定向到索引页。

有没有办法手动设置returnURL?

我正在使用此处描述的方法http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx,因为登录页面正在我的部分内部加载。

2 个答案:

答案 0 :(得分:0)

一种可能的选择是使用设置returnUrl查询字符串的JavaScript函数设置.OnComplete属性。

你可以实现一个类似的函数

var setReturnUrl(url) {
    var currentUrl = window.location;
    if(-1 != currentUrl.indexOf('returnUrl')) {
        var x = currentUrl.split('?');
        for(var i=0;i<x.length;i++) {
            if(-1 != x[i].indexOf('returnUrl')) {
                currentUrl = currentUrl.replace(x[i], 'returnUrl=' + url);
            }
        }
    } else {
        currentUrl = currentUrl + '&returnUrl=' + url;
    }
    window.location = currentUrl;
};

答案 1 :(得分:0)

怎么样,

     @Ajax.ActionLink("create poll question", 
"CreatePoll", new { id = Model.DebateID, returnUrl = "YOUR_URL" } ...

<强>更新

已经澄清了returnUrl,只产生了另一个属性。我们需要做的是修复href参数。

我建议创建自己的@ Ajax.ActionLink版本,它可以处理returnUrl。

public static MvcString ActionLink(this AjaxHelper ajaxHelper, string actionName, string returnUrl, object routerValues)
{
  // ...
}

在此方法中,您可以使用TagBuilder类来生成符合您需求的链接。看看CodePlex如何实现Ajax.ActionLink。