2009-12-27 24 views

Respuesta

14

Todo lo que hace el método HtmlHelper.BeginForm es ayudarle a crear una etiqueta <form> dirigida a un controlador local. Si usted está enviando a un sitio externo, acaba de escribir la etiqueta <form> real, es decir

<form action="http://www.example.com/someaction" method="post"> 
    Actual form content in here 
</form> 

Eso es todo lo que hay que hacer. Los formularios MVC no son como los formularios en ASP.NET WebForms donde tiene un montón de ViewState y campos de eventos y otros elementos mágicos. Simplemente son viejos formularios HTML normales.

+0

Sí, lo hice. Pero me preguntaba si me estaba perdiendo algo en MVC (viniendo de RoR Land, hay un método de forma {url =()}. Thx. – dale

+4

puede haber algunos problemas relacionados con la validación que no se crean para usted si usted crea el formulario manualmente, así que tenga cuidado si usa la validación MVC con jQuery –

+1

Como señaló simon weaver, si no usa el marco de validación HtmlHelper no funciona. Me encontré con este problema yo mismo – Zasz

0

verificación del código fuente de MVC, el método html.beginform no sólo crear sólo la forma html nativa, sino también añadir algo de validación del cliente que acaba quiero,

if (htmlHelper.ViewContext.ClientValidationEnabled) 
{ 
    htmlHelper.ViewContext.FormContext.FormId = tagBuilder.Attributes["id"]; 
} 

por lo que habrá un problema, i simplemente escriba mi propia extensión

57

El método BeginForm tiene varias sobrecargas. Con el fin de establecer el atributo de acción en la etiqueta de formulario con la dirección URL deseada, es necesario utilizar después de la sobrecarga de BeginForm:

BeginForm(String, String, FormMethod, IDictionary<String, Object>) 
// here are the parameter names: 
BeginForm(actionName, controllerName, method, htmlAttributes) 

Puesto que usted desea publicar en un sitio externo, no hay necesidad de establecer actionName y controllerName, simplemente déjalos como nulos.

@Html.BeginForm(
    null, null, FormMethod.Post, new {@action="http://cnn.com/post"} 
) 

Esto no codificará el parámetro de acción.

+1

Esto me ahorró tiempo. ¡Genial! – Govind

Cuestiones relacionadas