如何在Ajax.BeginForm完成后获得完整的AJAX URL请求?

时间:2017-02-09 06:44:16

标签: ajax asp.net-mvc url

在我的代码中,当用户按下提交按钮时,它将向控制器执行AJAX请求。

一切正常,但是,我还想更新浏览器网址以包含完整的查询字符串(例如http://localhost/Forecast?BillingToes=123&Year=2016)。

Controller正在返回带有模型的局部视图。使用查询字符串添加包含完整URL的其他属性似乎没问题。但是,它看起来很尴尬。

所以我的问题是,有没有办法在OnComplete之后通过JavaScript检索完整的URL?以下是我的观点:

@using (Ajax.BeginForm("UpdateForecast", null, new AjaxOptions
{
    HttpMethod = "Post",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "forecastControlPart",
    LoadingElementId = "ajaxSpinnerImage",
    OnBegin = "DeactivateForm",
    OnSuccess = "initAppendHeader();UpdateURL(xhr)",
    OnComplete = "ReloadFiltersBehaviour"
}, new
{
    @class = "onChangeForm",
    data_currencyurl = @Url.Action("GetCurrencyForBilling", "DataSource"),
}))

1 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案,使用$(form).serialize()可以获取表单提交给服务器的所有参数,所以我的代码看起来像:

在我的观点中:

@using (Ajax.BeginForm("UpdateForecast", null, new AjaxOptions {
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
OnSuccess = "initAppendHeader(),UpdateURL(this)",
}))

在我的Javascript文件中:

function UpdateURL(form) {
// Auto-Update browser URL to include parameters after submit.
var formData = $(form).serialize();
window.history.pushState(null, null, formData);
}