[modifier]
re-itterate mon point dans les commentaires sur les autres réponses: lorsque vous liez LOGIC à la valeur d'un bouton en C# vous liez votre code C# pour cette langue.
Imaginez que vous avez le bouton Enregistrer dans la version anglaise:
<input type="submit" value="Insert" name='button' />
et dans votre code que vous allez passer en utilisant la valeur:
public ActionResult Index(string button)
{
switch (button)
{
case "Insert": ...
case "Update": ...
case "Delete": ...
}
return View();
}
maintenant - quand cette forme est considérée dans une autre langue - que pensez-vous qu'il va se passer?!?!
est ici la sortie welsh html:
<input type="submit" value="Mewnosod" name='button' />
et allemand:
<input type="submit" value="Einfügen" name='button' />
Comment est-ce jamais à travailler ?!
La mondialisation n'est pas une issue distincte !!!!
votre action ressemblera à ceci si vous utilisez cette méthode:
public ActionResult Index(string button)
{
switch (button)
{
case "Insert": ...
case "Update": ...
case "Delete": ...
case "Einfügen": ...
case "Mewnosod": ....
.... a load of other languages for each action type -
}
return View();
}
... s'il vous plaît sérieusement ....
[/ modifier]
Voici mon code d'action MVC Sélecteur : Asp.Net Mvc action selector
essentiellement, vous avez besoin d'une classe de sélecteur d'action:
/// <summary>
/// AcceptParameterAttribute to enable submit buttons to execute specific action methods.
/// </summary>
public class AcceptParameterAttribute : ActionMethodSelectorAttribute
{
/// <summary>
/// Gets or sets the value to use in submit button to identify which method to select. This must be unique in each controller.
/// </summary>
public string Action { get; set; }
/// <summary>
/// Determines whether the action method selection is valid for the specified controller context.
/// </summary>
/// <param name="controllerContext">The controller context.</param>
/// <param name="methodInfo">Information about the action method.</param>
/// <returns>true if the action method selection is valid for the specified controller context; otherwise, false.</returns>
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
if (controllerContext == null)
{
throw new ArgumentNullException("controllerContext");
}
var req = controllerContext.RequestContext.HttpContext.Request;
return req.Form.AllKeys.Contains(this.Action);
}
}
Ce qui fonctionne sur le nom que vous donnez au bouton.
Vous pouvez décorer les actions avec:
[AcceptParameter(Action = "Edit")]
public ActionResult Person_Edit(PersonViewModel model){
...
}
Commutation dans l'action est sale - c'est une approche beaucoup plus propre. Je pense beaucoup plus naturel aussi.
voici une version mise à jour de ce code avec support de liste (databound): http://blogs.sonatribe.com/wayne/2011/06/15/171/ – iwayneo
J'ai essayé cela ... Mais je suis obtenir un message d'erreur Comme "Sample.Controllers.AcceptParameterAttribute" ne contient pas un constructeur qui prend 1 arguments " – san
ooops désolé! mon erreur - vous devez utiliser la méthode optionnelle args: [AcceptParameter (Action = "Edit")] – iwayneo