2010-12-13 3 views
1

Ich habe ein Szenario, in dem ich zwei Ansichten in eine gemeinsame Ansicht kombiniert.ASP.NET Ausgeschlossen View Being Hit

Von Projekt ausgeschlossen, aber immer wird

  • Views/Foo/Do.aspx
  • Views/Bar/Do.aspx

in Project Exists getroffen wird aber nie getroffen

  • Aufrufe/Geteilt/Do.aspx

Die Dateien sind weiterhin in der Quellcodeverwaltung vorhanden, sind jedoch nicht mehr Teil des Projekts.

  1. Warum hat eine Ansicht, die nicht mehr Teil des Projekts ist, Vorrang vor einer Ansicht, die Teil des Projekts ist? Vielleicht denke ich, dass MVC mehr tut, als es tut ...

  2. Sucht MVC nur nach irgendeiner Datei, die gefunden werden kann, die übereinstimmt, obwohl es ein Teil des Projekts ist?

  3. Ist das ein potenzieller Sicherheitsfehler, wenn Sie eine Datei mit dem richtigen Namen dort einfügen können, obwohl sie nicht Teil des Projekts ist?

Antwort

2

Antwort 2 ist korrekt. MVC durchsucht die Ansichtsordner nach einer passenden benannten Ansicht. Vorrang ist bei einem Fall von mehr spezifischen Overrides allgemeiner (dh die "Do" -Ansicht, die vom Controller "Foo" aufgerufen wird, sucht zuerst nach Views/Foo/Do.aspx und dann nach Views/Shared/Do.aspx). Dasselbe gilt für Partials, außer dass die Hierarchie priorisiert wird, zuerst durch Erweiterung (ascx), dann durch die Spezifität des Ordners.

Wenn Sie Teil eines Projekts sind, wirkt sich dies nur auf Visual Studio aus (die Tools wie "Gehe zu Ansicht", Veröffentlichungseigenschaften usw.). Wenn Sie jedoch kompilierte Ansichten auswählen, kann dies einen Unterschied machen.

Es ist nur ein Sicherheitsrisiko, wenn Sie Benutzern erlauben, Dateien einfach in Ihre View-Ordner zu legen. In diesem Fall könnten sie nur die Ansichten überschreiben, die Sie ohnehin in Ihr Projekt aufgenommen haben.