MVC Redirecting Action с использованием Json - PullRequest
0 голосов
/ 30 мая 2018

Цель: написанный код предполагает сохранение всего содержимого с помощью Json и перенаправление на действие.

Проблема: текущее перенаправление с использованием Json не допускает перенаправления, как предполагается.вернуть новый JsonResult {Data = new {status = status}};

Код ниже для справки: Ищу предложения:

Просмотреть код

$.ajax({ 
    url: '/SA/Save',
    type: "POST",
    data: JSON.stringify(data),
    dataType: "JSON",
    contentType: "application/json",

    success: function (d) {
        //check is successfully save to database
        if (d.status == true) {
            //will send status from server side
            alert('Successfully done.');

            window.location.href = d.Url;
            //clear form
            t = [];
            d = [];
            r = [];
            $('#SN').val('');
            $('#SA').val('');
            $('#t').empty();
            $('#d').empty();
            $('#r').empty();
        }
        else {
            alert('Failed');
        }
        $('#submit').val('Save');
    },     
});

Контроллер

public JsonResult Save(SAVM O,)
{
    bool status = false;

    var userId = User.Identity.GetUserId();

    if (ModelState.IsValid)
    {
        SA s = new SA
        {
        }

        _db.SA.Add(O)
        _db.SaveChanges();
        status = true;
    }
    else
    {
        status = false
    }

    return new JsonResult { Data = new { status = status }  };
}

Здесь хотите перенаправить так:

return RedirectToAction("F", "SA"); 

, но с использованием JsonResult

Решение

Просмотр

$.ajax({ 
url: '/SA/Save',
type: "POST",
data: JSON.stringify(data),
dataType: "JSON",
contentType: "application/json",

success: function (d) {

window.location.href = d.Url;

})
} });

Контроллер

public JsonResult Save(SAVM O,)

{

var userId = User.Identity.GetUserId();

if (ModelState.IsValid)
{
    SA s = new SA
    {
    }

    _db.SA.Add(O)
    _db.SaveChanges();

 return Json(new { Url = "F/SA" });

}

1 Ответ

0 голосов
/ 30 мая 2018

У вас есть несколько вариантов здесь, вы решаете, какой из них вы предпочитаете, исходя из ваших требований.

  1. Не используйте AJAX.Запросы AJAX предназначены для данных, необходимых для текущей страницы.Вы должны использовать синхронный запрос для перенаправления.

  2. Возвращает URL-адрес, на который клиент должен перенаправить событие success:

    return Json(new { url = "/F/SA" });
    

    И затем:

    success: function (d)
    {
        window.location.url = d.url;
    }
    
  3. Вернуть уже обработанный просмотр и загрузить его на текущую страницу:

    return View("some view...");
    

    А затем:

    success: function (d)
    {
        $("#someElement").html(d);
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...