Je veux faire ce qui suit:MVC utilisant Action Filter pour vérifier les paramètres dans l'URL. arrêter l'action d'exécuter
lorsque l'URL ne dispose pas d'un instID, je veux rediriger vers la "Instelling"
l'action
dans ce contrôleur , chaque méthode a besoin du instID .
[RequiredParameter(parameterName="instID", controllerToSend="Instelling")]
public ActionResult Index(int? instID) {
//if (!instID.HasValue) {
// return RedirectToAction("Index", "Instelling");
//}
var facts = _db.Instellingens.First(q => q.Inst_ID == instID).FacturatieGegevens;
return View(facts);
}
donc c'est dans le contrôleur.
le ActionFilter:
namespace MVC2_NASTEST.Controllers {
public class RequiredParameterAttribute : ActionFilterAttribute {
public string parameterName { get; set; }
public string actionToSend { get; set; }
public string controllerToSend { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (parameterName != string.Empty) {
if (filterContext.ActionParameters.ContainsKey(parameterName) && filterContext.ActionParameters[parameterName] != null) {
string s = "test";
//all is good
} else {
//de parameter ontbreekt. kijk of de controller en de action geset zijn.
if (actionToSend == string.Empty)
actionToSend = "Index";
if (controllerToSend == string.Empty) {
controllerToSend = filterContext.Controller.ToString();
controllerToSend = controllerToSend.Substring(controllerToSend.LastIndexOf(".") + 1);
controllerToSend = controllerToSend.Substring(0, controllerToSend.LastIndexOf("Controller"));
}
UrlHelper helper = new UrlHelper(filterContext.RequestContext);
string url = helper.Action(actionToSend, controllerToSend);
HttpContext.Current.Response.Redirect(url);
//filterContext.HttpContext.Response.Redirect(url, true);
}
}
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext) {
base.OnActionExecuted(filterContext);
}
}
}
la chose est: il ne fonctionne pas, cependant, l'action elle-même obtient d'abord exécuté, la redirection se produit. ce n'est pas ce que je voulais.
Peut-être que je ne devrais pas utiliser les filtres d'action, mais juste ajouter un itinéraire? Dans ce cas, comment rediriger la route vers un autre contrôleur si l'instID est manquant?
Et si au lieu d'utiliser un attribut, vous remplacez le OnActionExecuting dans votre contrôleur? Si chaque action sur ce contrôleur nécessite cette logique, cela pourrait être une bonne option. –