web-dev-qa-db-fra.com

FormCollection vide sur la publication de formulaire dans ASP.NET-MVC

Je poste un formulaire très simple en utilisant une méthode que j'ai utilisée fréquemment dans le passé. Il peut être plus facile de montrer mon code plutôt que de taper une longue explication. Voici le code HTML:

<% 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();%>

Et voici le code du contrôleur:

[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());
}

Le bouton d'envoi envoie le formulaire et la méthode est invoquée, mais l'objet de formulaire défini dans mon paramètre est vide. J'ai aussi essayé Request.Form et j'obtiens le même résultat. Est-ce que j'ai râté quelque chose?

30
Mark Struzinski

Aucune de vos entrées n'a d'attribut de nom. Pas de nom = pas dans le FormCollection.

89
Craig Stuntz

J'avais ce problème et ensuite j'ai réalisé que j'avais désactivé tous les contrôles INPUT avant de soumettre le formulaire (en tant que fonctionnalité UX).

3
ben

Je vois que cette question est déjà répondue. Voici une autre approche que j'ai utilisée dans une vue MVC, lorsque la collection de formulaires était vide. À l'aide de JavaScript/jQuery, il définit les paires nom-valeur sur un contrôle caché qui est ajouté au formulaire.

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();
            });

Forme

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

Référez-vous Formulaires

Lorsqu'un formulaire est soumis à un traitement, la valeur name de certains contrôles est associée à la valeur actuelle et ces paires sont soumises au formulaire.

0
Lijo

J'aimerais pouvoir poster ceci comme un simple commentaire, mais je n'ai pas ce privilège ... J'ai ajouté tous les attributs de mon nom et toujours pas de joie. N'oubliez pas d'ajouter votre attribut name à votre formulaire lui-même. Doit utiliser la surcharge pour HTML.BeginForm qui accepte htmlAttributes.

0
dudeNumber4