Wir haben unsere Geschäftslogikschicht und Geschäftsobjekte in ein vollständig separates Projekt / eine separate Baugruppe unterteilt. Einige Eigenschaften der Modelle können HTML-Inhalt enthalten. Vor der Geschäftslogik haben wir eine ASP.NET MVC-Webanwendung, in der Benutzer die Geschäftsobjekte verwalten können.
Wie können wir also dem MVC-Modellbinder angeben, dass wir HTML-Inhalt nur auf bestimmten Eigenschaften zulassen möchten (ohne nur auf ASP.NET MVC in unserer Geschäftslogikebene zu verweisen)? Oder wie können Metadaten von einer anderen Assembly ohne starke Referenzen eingefügt werden?
Danke.
Implementieren Sie Ihr eigenes IModelBinder
und AllowHtmlAttribute
- setzen Sie das Attribut in Ihr Hauptprojekt und das IModelBinder
in Ihre MVC-Anwendung.
Um das IModelBinder
zu implementieren, erben Sie einfach von DefaultModelBinder
und fügen Logik hinzu, um die Anforderungsvalidierung basierend auf dem Vorhandensein Ihres eigenen AllowHtmlAttribute
Dann verbinden Sie Ihren eigenen ModelBinder in Application_Start
(oder anderen Startup-Code)
Diese Logik im benutzerdefinierten Modellbinder ist das, was die AllowHtmlAttribute
in MVC tut, aber Sie könnten diese nicht einfach verwenden, da sie in MVC untrennbar mit ModelMetadata verknüpft ist.
Das Anforderungsvalidierungskonzept, auf das sich AllowHtml verlässt, und die Bindungsüberprüfungen sind spezifisch für Webanforderungen. Hier gibt es keine Trennung von Bedenken, sie sind eng miteinander verbunden. Also nein, Sie können es nicht verwenden, ohne einen Verweis auf System.Web etc.
zu nehmenSie schließen die (meiner Meinung nach) korrekteste Option aus - Modelle anzeigen, obwohl Validierung und Bindung wirklich ein Ansichtsmodellkonzept ist.
Sie können keine tragbaren Geschäftsobjekte mit webspezifischen Bindungs- und Validierungskonzepten verwenden.
Tags und Links asp.net-mvc .net asp.net security dependency-management