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?
Aucune de vos entrées n'a d'attribut de nom. Pas de nom = pas dans le FormCollection.
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).
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.
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.