Мне нужно, чтобы действие POST было абсолютным URL (например, http://www.cnn.com). Есть ли способ использовать Html.BeginForm() помощник и передать ему url?
Html.BeginForm() с абсолютным URL?
Ответ 1
Метод BeginForm имеет несколько перегрузок. Чтобы установить атрибут action в теге формы с требуемым URL-адресом, вам необходимо использовать следующую перегрузку BeginForm:
BeginForm(String, String, FormMethod, IDictionary<String, Object>)
// here are the parameter names:
BeginForm(actionName, controllerName, method, htmlAttributes)
Поскольку вы хотите отправить сообщение на внешний сайт, нет необходимости устанавливать actionName и имя_контроллера, просто оставьте их как null.
@Html.BeginForm(
null, null, FormMethod.Post, new {@action="http://cnn.com/post"}
)
Это не будет кодировать параметр действия.
Ответ 2
Все, что делает метод HtmlHelper.BeginForm
, поможет вам создать тег <form>
, предназначенный для локального контроллера. Если вы отправляете на внешний сайт, просто напишите фактический тег <form>
, т.е.
<form action="http://www.example.com/someaction" method="post">
Actual form content in here
</form>
Вот и все. Формы MVC не похожи на формы в ASP.NET WebForms, где у вас есть куча полей ViewState и полей и других магических элементов. Это обычные обычные HTML-формы.
Ответ 3
проверьте исходный код mvc, метод html.beginform не только создаст только собственную HTML-форму, но также добавит sth для проверки клиента, которая просто мне нужна,
if (htmlHelper.ViewContext.ClientValidationEnabled)
{
htmlHelper.ViewContext.FormContext.FormId = tagBuilder.Attributes["id"];
}
так что это будет проблема, я просто напишу собственное расширение