Лучший способ обработки сценариев POST без JavaScript - это, как заявили несколько других, крошечная форма с только необходимыми значениями и только одной кнопкой отправки. По сути, вам нужно создать вспомогательный метод, который создает форму с необходимыми значениями POST в скрытых полях и кнопку отправки. Например, вы можете использовать метод, который вы используете следующим образом:
<%= Html.PostLink("FooArea/BarController/BazAction", "Toggle1", new List<KeyValuePair<string, string>>{ new KeyValuePair<string, string>("itemId", 1), new KeyValuePair("action", "option1") }); %>
Это выглядит довольно многословно, но я постарался сделать его как можно более общим. Вероятно, вы можете создать List<KeyValuePair<string, string>>
в контроллере при рендеринге представления, так что вам нужно только вызвать что-то
<%= Html.PostLink("FooArea/BarController/BazAction", "Toggle1", Model.Values) %>
В методе действия, который обрабатывает публикацию, вы привязываетесь к опубликованной коллекции FormCollection и извлекаете значения itemId
и action
, чтобы определить, что делать, вместо проверки Request.Form
значений.
Реализация вспомогательного метода может выглядеть следующим образом:
public static string PostLink(this HtmlHelper helper, string postAction, string submitText, IEnumerable<KeyValuePair<string, string>> postValues)
{
var form = new TagBuilder("form");
// Setup basic properties like method, action
form.Attributes.Add("method", "post");
form.Attributes.Add("action", postAction);
// Instantiate a stringbuilder for the inner html of the form
var innerHtml = new StringBuilder();
// Create and append hidden fields for the post values
foreach(var value in postValues)
{
var hidden = new TagBuilder("input");
hidden.Attributes.Add("type", "hidden");
hidden.Attributes.Add("name", value.Key);
hidden.Attributes.Add("value", value.Value);
innerHtml.Append(hidden.ToString(TagRenderMode.SelfClosing));
}
// Create the submit button
var submit = new TagBuilder("input");
submit.Attributes.Add("type", "submit");
submit.Attributes.Add("value", submitText);
// Append it to the stringbuilder
innerHtml.Append(submit.ToString(TagRenderMode.SelfClosing));
// Set the InnerHtml property of the form, and return it
form.InnerHtml = innerHtml.ToString();
return form.ToString(TagRenderMode.Normal);
}