Mit Editable-Attribut auf MVC 3-view-Modell
Ich bin auf der Suche über Attribute markieren view-model-Eigenschaften readonly, so dass die view-Felder können nur gelesen werden in der gerenderten Ansicht. Die Anwendung System.ComponentModel.DataAnnotations.EditableAttribute erscheint, werden die genauen attribute, die ich brauche, aber es scheint nicht zu arbeiten, D. H. textbox-Felder noch bearbeitet werden. Ich habe sah überall, und Sie finden keine Antworten und nur ein paar Fragen. Das editable-Attribut angewendet wird wie unten funktioniert nicht, wenn die view gerendert wird.
[Display(Name = "Last Name")]
[Editable(false, AllowInitialValue = true)]
public string LastName { get; set; }
Kann ich erreichen das readonly-Verhalten mit einem view-helper-Funktion wie diese, aber meine Vorliebe ist die Verwendung eines Attributs für die Eigenschaft model.
@functions {
object getHtmlAttributes()
{
if (@ViewBag.Mode == "Edit")
{
return new {style = "width:100px;background:#ff6;", @readonly = "readonly"};
}
return new { style = "width:100px;" };
}
}
@Html.TextBoxFor(model => model.FirstName, getHtmlAttributes())
Anderen Parametern arbeiten völlig in Ordnung, einschließlich benutzerdefinierte validierungsattribute. Können Sie mir sagen, ob die Daten Anmerkungen editable-Attribut funktioniert in diesem Kontext soll nur die Arbeit als angewandte oben oder ist es etwas anderes, das getan werden muss? Danke.
- Auf der create view-wir möchten, dass Benutzer in der Lage sein, um erste Werte für alle Felder, aber einmal in der Bearbeiten-Ansicht einige dieser Felder brauchen, um sich readonly.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den EditableAttribute Dokumentation Staaten:
Leider bedeutet dies, dass die Verwendung dieses Attribut nicht haben keine Auswirkung auf die Validierung in MVC. Dieser fühlt sich falsch an, aber es macht Sinn, wenn Sie darüber nachdenken, was es nehmen würde, um die Implementierung in MVC-framework. Zum Beispiel, in einer typischen "Bearbeiten" - Ansicht, der Benutzer hat eine erste GET-request, in dem das Modell wird aufgefüllt (in der Regel aus einer DB-Datensatz) und die Ansicht für den Benutzer wiedergegeben. Der Anwender macht einige änderungen und dann das Formular absendet. Absenden des Formulars bewirkt, dass ein neue Instanz des Modells werden gebaut von der POST-Parameter. Es wäre sehr schwierig für die Prüfungen, um sicherzustellen, das Feld hat den gleichen Wert in beiden Instanzen, weil eine der Instanzen (die erste von GET-request) bereits veräußert worden.
Gut, wenn das Attribut hat keine Funktion, warum einmal die Mühe, es zu benutzen?
Meine beste Vermutung ist, dass Sie erwarten, dass Entwickler, um es in Ihrem code zu zeigen, Absicht. Mehr praktisch, Sie können auch Ihren eigenen benutzerdefinierten code schreiben, um zu überprüfen, ob dieses Attribut...
Beachten Sie auch, dass diese DataAnnotation-Attribute sind nicht nur für MVC-Anwendungen, die Sie verwendet werden können für viele verschiedene Arten von Anwendungen. Auch wenn MVC nicht etwas besonderes tun, mit diesem Attribut, andere frameworks implementierten Funktionalität/Validierung für dieses Attribut.
Nur semi-gelöst dieses Problem mich.
[HiddenInput(DisplayValue=true)]
Wird das Feld zwar angezeigt, aber nicht bearbeitet werden.
HiddenInputAttribute
ist in derSystem.Mvc
namespace. Hier ist der doc., Wenn Sie Anmerkungen zu Ihrem business-Modell-Klassen anstelle von ViewModels, macht es keinen Sinn zu machen, Ihr business-Modell abhängig von der MVC-framework. Wenn auf der anderen Seite, sind Sie mit ViewModels mit Anmerkungen, dieses Attribut funktioniert ohne zusätzlichen code.Haben Sie ein anderes Szenario erstellen? Irgendein besonderer Grund, die Sie erlauben, einen anfänglichen Wert? Ich Frage, weil die Dokumentation sagt:
Ich denke, wenn Sie ihn auf false setzen und nicht ausdrücklich erklären, die
AllowInitialValue
wird es funktionieren.Gefunden, dass die Verwendung von Editierbaren statt Readonly auf das Modell funktioniert genau das gleiche.
Diese syntax funktioniert auch wenn die Befragung ein property-Attribut auf die Perspektive an sich. Funktioniert auch, wenn das Attribut Editierbar ist(true)
Mit einem editor Vorlage hier ein einfaches string-template:
weiß nicht, ob Sie bemerkt haben das noch raus, aber wir verwenden
Nutzung
false
im Blick.