RedirectToAction с Ajax.Beginform, неожиданные результаты

У меня есть следующее представление, которое содержит Ajax.BeginForm: -

@using (Ajax.BeginForm("ChangeDevicesSwitch", "Switch", new AjaxOptions

{
    InsertionMode = InsertionMode.InsertBefore,
    UpdateTargetId = "result",
    LoadingElementId = "progress2",
    HttpMethod= "POST"
    ,
    OnSuccess = "createsuccess",
    OnFailure = "createfail"




}))
//code goes here
<p><img src="~/Content/Ajax-loader-bar.gif" class="loadingimage" id="progress2" /></p>
<div id ="result"></div>

и следующий метод действия, который будет вызываться из Ajax.Bginform: -

public ActionResult ChangeDevicesSwitch(SwitchJoin s)

        {//code goes here
            try
            {
                var count = repository.changeDeviceSwitch(s.Switch.SwitchID, (Int32)s.GeneralSwitchTo, User.Identity.Name.Substring(User.Identity.Name.IndexOf("\\") + 1));
                repository.Save();
                return RedirectToAction("Details", new { id = s.GeneralSwitchTo });

            }
            catch (Exception e)

            {
                return Json(new { IsSuccess = "custome", description = "Error occurred. Please check...." }, JsonRequestBehavior.AllowGet);
            }



        }

Скрипт, который будет запускаться при успешном возврате Ajax.BeginForm: -

function createsuccess(data) {
    if (data.IsSuccess == "Unauthorized") {

        jAlert(data.description, 'Unauthorized Access');
    }
    else if (data.IsSuccess == "False") {

        jAlert('Error Occurred. ' + data.description, 'Error');
    }
    else if (data.IsSuccess == "custome") {

        alert(data.description);

    }
    else  {
        jAlert('Record added Successfully ', 'Creation Confirmation');
    }

}

в настоящее время я столкнулся с проблемой, заключающейся в том, что при достижении RedirectToAction все представление будет отображаться внутри текущего представления !! так есть ли способ заставить мое приложение не обновлять цель, если возвращается RedirecttoAction?


person john Gu    schedule 21.05.2014    source источник
comment
Сделать редирект через ajax нельзя. Вместо этого вы можете отправить URL-адрес перенаправления обратно клиенту, а в функции createsuccess установить window.location на предоставленный URL-адрес.   -  person Zabavsky    schedule 21.05.2014
comment
Можете ли вы посоветовать подробнее об этом с помощью образца кода   -  person john Gu    schedule 21.05.2014


Ответы (2)


Верните URL-адрес, на который вы хотите выполнить перенаправление из метода действия, когда операция завершилась успешно:

public ActionResult ChangeDevicesSwitch(SwitchJoin s)
{
    try
    {
        ...
        return Json(new { RedirectUrl = Url.Action("Details", new { id = s.GeneralSwitchTo }) });
    }
    ...
}

И в createsuccess:

function createsuccess(data) {
    if (data.RedirectUrl)
        window.location.href = data.RedirectUrl;
}
person Zabavsky    schedule 21.05.2014
comment
вот один лайнер return JavaScript( "window.location = '" + Url.Action("Home","Details") + "'" ) check это, надеюсь кому-то поможет. - person Shaiju T; 21.06.2016

в моем случае работал следующий метод

function OnSuccess(data) {
    var json;
        if (data.responseText instanceof Object)
            json = data.responseText;
        else
            json = $.parseJSON(data.responseText);

        if (json.RedirectUrl)
            window.location.href = json.RedirectUrl;
}
person Raj K    schedule 29.05.2017