2009-02-02 18 views
28

Estoy publicando un formulario muy simple utilizando un método que he utilizado con frecuencia en el pasado. Puede ser más fácil mostrar mi código en lugar de escribir una explicación larga. Aquí está el código HTML:FormCollection Vacío en el formulario publicado en ASP.NET-MVC

<% Html.BeginForm("CreateMarketingType", "ListMaintenance"); %> 
    <div id="ListMaintenanceContainer"> 
     <table> 
      <tr> 
       <th>Marketing Type Id</th> 
       <th>Marketing Type Name</th> 
      </tr>      
       <%foreach (MarketingType marketingType in ViewData.Model.MarketingTypes) %> 
       <%{ %> 
        <tr> 
         <td><%= marketingType.MarketingTypeId.ToString() %></td> 
         <td><%= marketingType.MarketingTypeName %></td> 
        </tr> 
       <%} %> 
     </table> 
     <div> 
      <fieldset id="fsSaveNewMarketingType"> 
       <legend>Add New Marketing Type</legend> 
       <label for="txtNewMarketingTypeName">New Marketing Type Name:</label> 
       <input type="text" id="txtNewMarketingTypeName" /> 
       <input type="submit" value="Save" id="CreateMarketingType" /> 
      </fieldset> 
     </div>      
    </div> 
<% Html.EndForm();%> 

Y aquí está el código del controlador:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult CreateMarketingType(FormCollection form) 
{ 
    string newMarketingTypeName = Request.Form["txtNewMarketingTypeName"].ToString(); 

    MarketingType newMarketingType = new MarketingType() { MarketingTypeName = newMarketingTypeName }; 

    _marketingTypeRepository.AddNewMarketingType(newMarketingType); 

    return View("ListMaintenance", GetModel()); 
} 

El enviar mensajes de botón del formulario, y se invoca el método, pero el objeto de formulario definido en mi parámetro está vacío. También probé Request.Form y obtengo el mismo resultado. ¿Me estoy perdiendo de algo?

Respuesta

82

Ninguna de sus entradas tiene un atributo de nombre. Sin nombre = no en FormCollection.

+8

Ouch - ¡eso es lo que obtengo al crecer en WebForms! Pensé que el atributo id pasó los valores en el formulario. ¡¡Gracias por la respuesta!! –

+1

¡Gracias! Yo también pensé que el atributo id lo haría ... –

+0

Esto es sorprendente, ya que todo parece indicar que solo se usa el ID. Las cosas no son como parecían ... para mí de todos modos ... –

0

Ojalá pudiera publicar esto como un simple comentario, pero no tengo ese privilegio ... Agregué todos los atributos de mi nombre, y aún no me gustó. Recuerde agregar su atributo de nombre a su formulario. Debe usar la sobrecarga para HTML.BeginForm que acepta htmlAttributes.

3

Tuve este problema y luego me di cuenta de que había desactivado todos los controles INPUT antes de enviar el formulario (como una función de UX).

+0

Cuando deshabilita los campos, ¿los elimina de FormCollection? Parece que estoy teniendo el mismo problema. – WEFX

0

Veo que esta pregunta ya está respondida. El siguiente es otro enfoque que utilicé en una vista de MVC, cuando la colección de formularios estaba vacía. Usando JavaScript/jQuery, establece pares de nombre-valor a un control oculto que se agrega al formulario.

JavaScript/jQuery

$("#btnExport").click(function (event) { 
       event.preventDefault(); 

       //Append the parameter to the form 
       var practiceVal = $('#Practice').val(); 
       $('<input />').attr('type', 'hidden') 
        .attr('name', "Practice").attr('value', practiceVal) 
        .appendTo('#formHome'); 

       //Submit 
       $('#formHome').submit(); 
      }); 

Formulario

<form id="formHome" method="post"> 
</form> 

Consulte Forms

Cuando se envía un formulario para su procesamiento, algunos controles tienen su name pa con su valor actual y estos pares se envían con el formato

Cuestiones relacionadas