Comment passer de la valeur du bouton soumettre pour mvc dynamiquement?
J'ai commencé à travailler avec MVC depuis quelques jours et vous avez une question d'apprendre beaucoup de façons de communiquer entre les Contrôleurs et les Vues MVC
J'ai la page qui affiche la liste des employés sous forme de tableaux.
Modèle est de type IEnumerable
de Employee Model
Il dispose de trois boutons, ils sont Edit
, Create
, Delete
, Details
.
Exigence:
J'ai utilisé les boutons de sorte que tous devraient être de la requête HTTP Post type, parce que je ne veux pas que les utilisateurs d'accéder directement entre eux à l'aide de demandes d'URL.
Voici mon code:
@using (Html.BeginForm())
{
<p>
<input type="submit" name="CreateView" value="Create New(Post)" formaction="CreateView" formmethod="post" />
</p>
<table class="table">
<tr>
-------Headings of table-------
</tr>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.EmployeeName)</td>
<td>@Html.DisplayFor(modelItem => item.EmployeeGender)</td>
<td>@Html.DisplayFor(modelItem => item.EmployeeCity)</td>
<td>@Html.DisplayFor(modelItem => item.DepartmentId)</td>
<td>@Html.DisplayFor(modelItem => item.EmployeeDateOfBirth)</td>
<td>
<input type="submit" name="EditView" value="Edit(Post)" formaction="Edit" formmethod="post" /> |
<input type="submit" name="DetailsView" value="Details(Post)" formaction="Details" formmethod="post" /> |
<input type="submit" value="Delete(Post)" onclick="return confirm('Are you sure you want to delete record with EmployeeId = @item.EmployeeId')" />
</td>
</tr>
}
</table>
}
Ici bouton supprimer fonctionne car je n'ai pas besoin de l'id de l'employé.
Mais pour d'autres actions comme l'édition, la suppression et les détails de l'affichage j'ai besoin de passer Employés Id de contrôleur. Mais comment puis-je passer l'Id du contrôleur en utilisant le bouton soumettre.
Dans les requêtes get types que j'ai utilisé pour passer comme ceci:
@Html.ActionLink("Details", "Details", new { id = item.EmployeeId })
Pour seul bouton submit j'ai utilisé pour transmettre des données de cette
@using (Html.BeginForm("Details", "BusinessLayer", FormMethod.Post, new { id = item.EmployeeId }))
Quelqu'un peut-il me dire la démarche que je peux en friche pour y parvenir?
- Plusieurs soumet à l'intérieur seul formulaire peut être une mauvaise idée. vous pouvez utiliser le bouton au lieu de cela, avec l'aide de javascript, vous pouvez la soumettre.
- L'OP veut rediriger si l'ajax ne fonctionnent pas.
- Il suffit de créer un formulaire pour chaque action et chaque élément de la collection -
@Html.BeginForm("Edit", "yourControllerName, new { id = item.EmployeeId })) { <input type="submit" value="Edit" /> }
etc - ouais, mais on ne peut avoir qu'une action de contrôleur de post juste? et si les performances sont tous là dans une action, nous devons passer en mode edit (Éditer/supprimer/détails emp id comme paramètre facultatif.Corrigez-moi si mon approche est erronée
- L'id est passé en paramètre de route (
new { id = item.EmployeeId }
) Et pourquoi voudriez-vous une seule méthode POST au lieu d'un pour chaque action? (bien que vous pouvez le faire en donnant à chaque bouton soumettre le même nom (par exemplename="action"
) et l'ajout d'un paramètrestring action
dans votre méthode POST)` - Je pensais à l'aide du formulaire unique uniquement merci pour la mise à jour.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir 3 balises de formulaire, un pour chaque bouton. Assurez-vous d'avoir un champ de saisie dans le formulaire pour les données que vous souhaitez passer. Par exemple, si votre méthode d'action, c'est d'accepter l'Employé avec un paramètre appelé
EmployeeId
, vous devriez avoir à l'entrée de champ caché, même à l'intérieur de la forme.Rappelez-vous aussi, des formulaires imbriqués ne sont pas valides HTML. Donc, assurez-vous de ne pas avoir les.