Предложения, необходимые для обработки маршрутов динамического перенаправления в ASP.Net MVC - PullRequest
2 голосов
/ 07 мая 2009

У меня есть несколько вариантов создания и удаления частичных представлений, которые я хочу использовать повторно, вызывая их из других представлений. Проблема заключается в том, что для этого мне необходимо передать return route и routeValues ​​в методы контроллера create и delete, чтобы они могли генерировать соответствующее перенаправление обратно в исходное представление в случае успеха. Я создал несколько расширений и помощников, чтобы сохранить это в чистоте, но кажется, что нужно решить эту проблему таким образом. Я что-то пропустил? Существует ли простой способ RedirectToAction, когда контроллер (redirect), action и routeValues ​​могут различаться?

Пример для наглядности: и представление индекса AZ продукта, и представление продукта SomeCategory Представление индекса имеют кнопку удаления, которая вызывает представление удаления (которое отображает сообщение «Вы действительно хотите удалить»), которое имеет Кнопка «Действительно удалить», которая возвращает обратно к фактическому (POST) методу удаления в контроллере продукта. Как только продукт удален, нам нужно вернуть RedirectToAction, но так как представления 'AZ Index' и ' SomeCategory Index' имеют ссылку Delete, мы должны динамически устанавливать action, controller и routeValues ​​для любого представления. вызвал удаление изначально.

Это не сложно, но крайне сложно передать значения перенаправления всем контроллерам и представлениям, которые обрабатывают удаление, и, разумеется, должен быть более разумный способ сделать это.

Ответы [ 3 ]

1 голос
/ 11 октября 2009

Опросите Request.UrlReferrer в действии Удалить (которое отображает представление подтверждения) и сохраните сведения о реферере во временных данных.

В действии удаления прочитайте информацию о реферере обратно из временных данных и используйте перегрузку Redirect (строка), чтобы перенаправить на URL, который направил пользователя к исходному запросу на удаление.

0 голосов
/ 09 мая 2009

Не используйте весь вид для «подтверждения удаления». Используйте Html-помощник и javascript 'verify ()'. то есть. визуализируйте форму публикации и удалите ссылку с помощью помощника, чтобы, когда пользователь нажимает кнопку «удалить», он получал js-запрос подтверждения «обязательно удалить?» и в порядке, функция «возвращает истину» и вызывает отправку в форме для удаления. тогда действие удаления просто перенаправляет туда, куда обычно. Я надеюсь, что вы используете разные действия для удаления различных объектов, которые вы пытаетесь удалить. если ваш план состоит в том, чтобы иметь общее действие удаления, ну, это сложнее (и не рекомендуется IMO).

Мой помощник удаления включает в себя множество вещей, но часть удаления выглядит следующим образом (с фрагментами):

            string deleteLink = String.Format(@"<a onclick=""deleteRecord({0})"" href='#'>Delete</a><form id='deleteForm' method='post' action='" +
             routeRelativePath + "/" + actionPrefix + "Delete/" + model.ID +
            @"'></form>", model.ID);

.. и он (помощник) также присоединяет некоторые js:

    function deleteRecord(recordId) {  
    if(confirm('Are you sure you want to delete this {friendlyModelName}?\nNOTE: There is no Undo.')) {
        // Perform delete  
        var action = "{routeRelativePath}/{actionPrefix}Delete/" + recordId;  

        // jQuery non-AJAX POST version
        $("form#deleteForm").submit();
    }
}  

.. вы можете видеть, что помощник создает ссылку Delete со всеми параметрами для маршрута, идентификатора и т. Д. Js просто выполняет часть 'Подтвердить', а затем передает крошечный фрагмент, который вы видите, созданный помощником.

[извините, если сэмплы не заполнены на 100% - мне пришлось удалить много вещей: например, у помощника и подключенных js есть много разных режимов, чтобы поддерживать ajax POST и т. Д.)

0 голосов
/ 07 мая 2009

вы рассматривали возможность использования RedirectToRoute

RedirectToRoute(new {controller = "MyController", Action = "Create", id = ""});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...