Je souhaite utiliser un filtre d'action personnalisé pour manipuler les paramètres d'une action.Asp.NET MVC ActionFilter impossible d'obtenir le formulaire Soumettre des données
Entrées utilisateur: 2 noms dans un formulaire;
Action: nécessite en fait 2 identifiants;
Filtre d'action (onExecuting, vérifiera les noms d'entrée et si elle est valide, les convertir en 2 cartes d'identité et remplacer dans le RouteData)
parce que je ne veux pas mettre la logique de validation dans le contrôleur d'action.
est ici une partie du code:
Informations sur le routage
routes.MapRoute ( "par défaut", // Nom de la route "{contrôleur}/{action}", // URL avec les paramètres new {controller = "Home", action = "Index"} // Paramètre par défaut );
routes.MapRoute ( "RelationshipResults", // Nom de la route "relation/{initPersonID}/{} targetPersonID", // URL avec des paramètres nouveau {controller = "Relation", action = "Résultats"})
formulaire pour soumettre (2 Créer boîte d'entrée et envoyer par jquery)
<% en utilisant (Html.BeginForm ("Résultats", "relation", FormMethod.Post, nouveau {id = "formulaireRecherche" })) { %>
...<td align="left"><%: MvcWeibookWeb.Properties.Resource.Home_InitPersonName%></td> <td align="right"> <%= Html.TextBox("initPersonID")%></td> <td rowspan="3" valign="top"> <div id="sinaIntro"> <%: MvcWeibookWeb.Properties.Resource.Home_SinaIntro %> <br /> <%: MvcWeibookWeb.Properties.Resource.Genearl_PromotionSina %> </div> </td> </tr> <tr> <td align="left" width="90px"><%: MvcWeibookWeb.Properties.Resource.Home_TargetPersonName%></td> <td align="right"><%= Html.TextBox("targetPersonID")%></td> </tr> <tr> <td colspan="2" align="right"> <a href="#" class="btn-HomeSearch" onclick="$('#formSearch').submit();"><%: MvcWeibookWeb.Properties.Resource.Home_Search%></a> </td>
action Filtre
public override void OnActionExecuting(ActionExecutingContext filterContext) { Sina.Searcher searcher = new Sina.Searcher(Sina.Processor.UserNetwork); String initPersonName, targetPersonName; // form submit names, we need to process them and convert them to IDs before it enters the real controller. initPersonName = filterContext.RouteData.Values["initPersonID"] as String; targetPersonName = filterContext.RouteData.Values["targetPersonID"] as String; // do sth to convert it to ids and replace
Action/Contrôleur
[ValidationActionFilter] [HandleError] Résultats ActionResult publique (Int64 initPersonID, Int64 targetPersonID) {...
Mon problème est: dans le ActionFilter, il n'a jamais obtient les 2 paramètres "initPersonID" et "targetPersonID", les RouteData.Values ne contiennent pas ces 2 clés ...
:(
grâce Toms, il ne fonctionne pas je les ai changé (en ligne mis à jour) – Goden
me laisser correcte 1 chose, si je tape http: // localhost/relation/nom1/nom2 ne déclenche l'action filtrer et obtenir mes valeurs, mais si je soumets à travers le formulaire, je ne les obtiens pas. – Goden
Maintenant, les choses deviennent intéressantes, je peux obtenir les données de formulaire par filterContext.HttpContext.Request.Form ["initPersonID"] si les données soumises à partir du formulaire. mais je peux utiliser initPersonName = filterContext.RouteData.Values ["initPersonID"] as String; pour obtenir la chaîne si vous tapez directement le nom dans l'URL. alors pourquoi ces 2 ne sont pas unis? – Goden