ASP.NET MVC 2 - Festlegen von Werten für IValueProvider

9

Ich versuche, mein MVC 1-Projekt auf MVC 2 RC zu aktualisieren. Wir haben derzeit einen benutzerdefinierten Modelbinder, der dem ValueProvider Objekte hinzufügt (dies funktionierte, als es ein Wörterbuch war). Diese haben wir dann an den Standard-Modelbinder weitergegeben. IValueProvider verfügt jedoch nicht über eine add-Methode, daher funktioniert dieser Algorithmus nicht mehr. Kennt jemand eine Möglichkeit zum Hinzufügen von Werten zum ValueProvider in MVC 2?

%Vor%     
Keith Rousseau 24.12.2009, 16:44
quelle

3 Antworten

2

Das Problem ist, dass Ihr ValueProvider zu dem Zeitpunkt, an dem Sie zu ModelBinder gelangen, bereits festgelegt wurde. Zuvor konnten Sie zu diesem Zeitpunkt Werte zu Ihrem ValueProvider hinzufügen.

Um einen benutzerdefinierten ValueProvider bereitzustellen, müssen Sie den ControllerActionInvoker überschreiben, der die ultimative Lösung darstellt. Leider wird der ControllerActionInvoker vom Controller-Objekt erstellt und nicht injiziert. Daher müssen Sie auch Controller außer Kraft setzen, um Ihren eigenen ControllerActionInvoker aufzurufen.

    
Keith Rousseau 25.01.2010, 16:58
quelle
0

Können Sie keinen der abgeleiteten Typen von IValueProvider ? (oder erstellen Sie sogar Ihre eigenen, aber es scheint anständige Implementierungen im Rahmen zu sein)

ValueProviderDictionary . ValueProviderCollection , FormCollection (und ein paar mehr) implementieren sie alle IValueProvider .

Ich bin mir nicht sicher, ob es hilft. Ich bin mir nicht ganz sicher, was Sie zu tun versuchen. Ich musste mich nicht so sehr mit den Postparametern herumschlagen.

    
ziya 25.01.2010 15:45
quelle
0

Ich verstehe dich wahrscheinlich falsch, aber was ist das Präfix, das du benutzt? Handelt es sich um eine Kindbeziehung Ihres Modells?

Wenn nicht, warum nicht vom DefaultModelBinder ableiten und die Methode BindModel() überschreiben? Auf diese Weise können Sie base.BindModel() aufrufen und die Werte anschließend bearbeiten. Sie können jedoch die Modellüberprüfung nicht verwenden (lesen Sie dazu Ссылка , da es eine signifikante Änderung in der Version gegenüber der RC geben wird.

Der sauberere Ansatz, von dem ich schätze, dass Sie es versuchen, ist, in diesem Fall ein ViewModel zu verwenden. Da die Manipulation wahrscheinlich nicht trivial ist, möchten Sie möglicherweise die Eingabe- und Modellvalidierung voneinander trennen.

Nicht sicher, ob dies auch hilft ...

    
mnemosyn 25.01.2010 16:08
quelle