Ich habe einen benutzerdefinierten ModelBinder und ich möchte die Aktion erhalten. Da ich die Attribute der Aktion über Reflektion erhalten möchte, reicht der Name der Aktion nicht aus.
meine Aktionsmethode:
%Vor%und hier ein typischer ModelBinder
%Vor%irgendwelche Vorschläge, andere Lösungen?
vielen Dank im Voraus
Nein, Sie können nicht mit 100% iger Sicherheit die aktuelle Aktion von einem Modellbinder erhalten. Der Modellbinder ist nicht an die Aktion gekoppelt, sondern an die Bindung an ein Modell. Zum Beispiel können Sie
anrufen %Vor%In einem Filter, bevor eine Aktion ausgewählt wurde. Beachten Sie auch, dass eine Aktionsmethode möglicherweise nicht einmal eine CLR-Methode ist (siehe Ссылка ), die reflektiert werden können.
Ich denke, die wirkliche Frage ist, was genau versuchen Sie zu erreichen, und ist das der richtige Weg? Wenn Sie möchten, dass Informationen aus der Aktion an den Modellbinder übergeben werden (beachten Sie den Hinweis, dass Ihr Modellbinder ordnungsgemäß reduziert werden sollte, wenn die Informationen nicht vorhanden sind), sollten Sie einen Aktionsfilter verwenden, um die Informationen in HttpContext.Items (oder irgendwo so, und dann lassen Sie Ihre Mappe es abrufen.
Die OnActionExecuting-Methode eines Aktionsfilters empfängt einen ActionExecutingContext mit einem ActionDescriptor. Sie können GetCustomAttributes dafür aufrufen.
Sie können ControllerActionInvoker.FindAction()
überschreiben, um das Attribut der Aktion zu erhalten, und es in HttpContext.Current.Items
wie hier erwähnt oder in ControllerContext.RequestContext
wie folgt speichern:
Der Standardaktionsinvoker wird entweder im Konstruktor des Controllers oder in einer benutzerdefinierten Controller-Factory ersetzt:
%Vor% Übrigens enthält Controller.TempData
bereits ein Element ReflectedParameterDescriptor
type, mit dem Sie auf ActionDescriptor
zugreifen können, sodass der obige Code redundant sein kann. Beachten Sie jedoch, dass dies implementierungsspezifisch ist und sich daher im Laufe der Zeit ändern kann.
Abschließend rufen Sie das Attribut aus diesem Speicher in Ihrer Binderklasse ab:
%Vor%Tags und Links asp.net-mvc asp.net-mvc-3 asp.net-mvc-2