ASP.NET MVC несколько форм, оставаясь на одной странице - PullRequest
1 голос
/ 21 марта 2011

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

У меня есть частичное представление, которое выполняет действие post to controller.

Какой результат действия я должен вернуть в этом сообщении, чтобы сохранить пользователя на текущей странице?

Является ли jquery / ajax моим единственным вариантом? Я бы предпочел решение, не зависящее от javascript, может быть, даже решение, которое хорошо ухудшается.

Ответы [ 3 ]

1 голос
/ 22 марта 2011

Вы можете использовать свойство Request.Referrer, чтобы увидеть, с какой страницы пришел пользователь, а затем просто использовать его, чтобы перенаправить его туда.

Это создает другие проблемы, например, потеря ModelState, так что вам придется разработать для этого. Также обратите внимание, что некоторые пользователи могут блокировать отправку информации о реферере в своих запросах на сервер - поэтому свойство Referrer может иметь значение null.

Я бы порекомендовал использовать AJAX, а затем вернуться к этому.

1 голос
/ 22 марта 2011

Чтобы опубликовать форму без отправки всей страницы, которая обновляет браузер, вам необходимо использовать Ajax / jQuery. Ухудшенное решение состоит в том, чтобы отправить всю страницу, как если бы вы использовали обычную форму.

Вот как я это делаю с помощью jQuery.

Html:

<div id="RequestButtonDiv">
    <button id="RequestButton" name="Request" type="button">Request</button> 
</div>

Это вызывает AddToCart на моем контроллере запросов, когда нажимается кнопка RequestButton. Ответ помещается внутри элемента RequestButtonDiv.

<script type="text/javascript">
            $(document).ready(function () {
                $('#RequestButton').click(function (event) {
                    $('#RequestButton').text('Processing...');
                    $('#RequestButton').attr('disabled', true);
                    submitRequest();
                });
            });

            function submitRequest() {
                $.ajax({
                    url: '<%: Url.Action("AddToCart", "Request", new { id = Model.RowId,  randomId = new Random().Next(1, 999999) }  ) %>',
                    success: function (response) {
                        // update status element
                        $('#RequestButtonDiv').html(response);
                    }
                });
            }           
 </script> 

Действие контроллера:

    public ActionResult AddToCart(int id)
    {
        var user = AccountController.GetUserFromSession();
        user.RequestCart.AddAsset(id);

        return View("~/Views/Assets/Details_AddToCart.ascx"); 
    }

Контроллер возвращает частичное представление. Вместо этого вы также можете вернуть Content («некоторые вещи»).

Привет, если у вас есть вопросы или вам нужна дополнительная информация.

1 голос
/ 21 марта 2011

Вам просто нужно выполнить RedirectToAction ("") назад к вашему основному виду.

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