Динамическое перенаправление от Url.Action - PullRequest
0 голосов
/ 12 октября 2018

Я строю объект, используя значения, переданные в контроллер через Url.Action, которое происходит, когда пользователь нажимает кнопку.

$.post("@Url.Action("CreateObj", "ObjectController")", {
    value: $value
})

В методе, который он вызывает, я создаю объект, назначьте ему идентификатор и сохраните объект в базе данных.

public void CreateObj(string value)
{
    Object newObj = Object(value);

    //Magic saving newObj to database

    int id = newObj.objectId; //Saves the object's id to a variable for demo purposes
}

Теперь я хочу сразу же перенаправить на страницу редактирования для этого нового объекта, где URL-адрес "./Object/Edit/" + newObj.objectId.

Я пытался перенаправить в методе C # CreateObj, я пытался передать objectId через ViewData, чтобы я мог перенаправить в функцию обратного вызова, но я не могу найти способ получить либоработа.

Как я могу перевести пользователя на страницу редактирования после создания объекта, если я не знаю идентификатор до его создания и не могу получить к нему доступ из представления?Я что-то упустил?

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Если ваш метод действия редактирования выглядит следующим образом

public ActionResult Edit(string value){
   //your magic codes
}

, вы можете вызывать его как обычные вызовы функций.

public void CreateObj(string value)
{
   Object newObj = Object(value);

   //Magic saving newObj to database

   int id = newObj.objectId; //Saves the object's id to a variable for demo purposes
   Edit(id);   // <-- Normal function call
}

Это автоматически перенаправит вас на страницу редактирования.

0 голосов
/ 12 октября 2018

Поскольку вы выполняете ajax-запрос, ваше Action должно возвращать Id созданного объекта, и вы должны обрабатывать перенаправление через JS.Поэтому измените тип возвращаемого значения и значение вашего действия на:

public ActionResult CreateObj(string value) {
    int id = newObj.objectId;
    return Json(id, JsonRequestBehavior.AllowGet);
}

и зарегистрируйте функцию обратного вызова в методе post () для выполнения перенаправления:

 $.post("@Url.Action("CreateObj", "Object")", {
                value:"value"
            }).done(function (data) { // data represents the returned id
                //handle success
                window.location.href = `@Url.Action("Edit", "Object")/${data}`;
            }).fail(function () {
                   //Handle failure
            })

• Проверьте, как $.post () работает на jQuery.post () .

0 голосов
/ 12 октября 2018

Вы можете использовать обратный вызов в функции, в которой вы создаете объект, вызывать его после создания объекта, передавая обратный вызов идентификатору объекта, а затем внутри обратного вызова перенаправить пользователя на новую страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...