опубликовать действие для url.action? - PullRequest
13 голосов
/ 09 февраля 2010

Вот строка кода в моем классе контроллера:

return JavaScript(String.Format("window.top.location.href='{0}';", Url.Action("MyAction", "MyController")))

Есть ли способ заставить его использовать verb=post версию MyAction?

Ответы [ 3 ]

19 голосов
/ 07 июня 2011

Я сам столкнулся с той же проблемой и решил ее с помощью атрибута data- и некоторого jQuery.Преимущество такого способа состоит в том, что вы все равно получаете правильный URL при наведении курсора на ссылку, даже если она выполняет POST.Обратите внимание, что Html.BeginForm содержит действие по умолчанию в случае, если пользователь нажимает клавишу ввода.

HTML (ASP.NET MVC3 Razor)

@using (Html.BeginForm("Quick", "Search"))
{
    <input type="text" name="SearchText" />
    <a href="@Url.Action("Quick", "Search")" data-form-method="post">Search</a>
    <a href="@Url.Action("Advanced", "Search")" data-form-method="post">Advanced</a>
}

jQuery

$("a[data-form-method='post']").click(function (event) {
    event.preventDefault();
    var element = $(this);
    var action = element.attr("href");
    element.closest("form").each(function () {
        var form = $(this);
        form.attr("action", action);
        form.submit();
    });
});
15 голосов
/ 09 февраля 2010

Вы не можете использовать POST, просто перейдя на другой URL.(Это то, что вы сделали бы, изменив location.href.)

Использование POST имеет смысл только при отправке некоторых данных.Из вашего кода не ясно, какие данные будут на самом деле POST.

Если вы действительно хотите инициировать POST через javascript, попробуйте использовать его для отправки формы.

2 голосов
/ 09 февраля 2010

Продолжая ответ Мэтта Лейси, ваше действие может вернуть немного JavaScript, который делает это:

  1. Используйте jquery для добавления новой формы в DOM
  2. Используйте jquery для отправки новой добавленной формы

Примерно так: (непроверенный код)

var urlHelper = new UrlHelper(...);
var redirectUrl = urlHelper.Action("MyAction", "MyController");

var redirectScript = String.Format(@"
    var formTag = $('<form action=""{0}"" method=""post"" id=""redirectForm""></form>');
    $(body).append(formTag);
    formTag.submit();"
    , redirectUrl
);

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