10 Stimmen

Wie kann man die Bearbeitung bestimmter Spalten im Popup-Editor deaktivieren?

ASP.Net MVC 3, Kendo UI Web, Kendo Grid-Steuerung.

Ich habe mehrere Felder so konfiguriert, dass sie schreibgeschützt sind:

.Model(model =>
      {
          model.Field(it => it.foobar).Editable(false);
          ...

und es funktioniert wie erwartet im Inline-Modus. Aber wenn ich den Modus auf Popup umstelle, zeigt der Editor die gesamte Struktur an, so dass ich jedes beliebige Feld bearbeiten kann (auch die als nicht editierbar markierten).

Wie kann man sie so markieren, dass im Popup-Editor nur die zur Bearbeitung markierten Dateien angezeigt werden?

8voto

Andrew Stakhov Punkte 1065

Der Popup-Editor verwendet das MVC-Editor-Template, das völlig unabhängig von dem von Kendo ist. Wenn Sie dieses Feld als schreibgeschützt kennzeichnen möchten, müssen Sie ein Metadaten-Attribut im Modell im Code anhängen. Beispiel:

public class MyClassUsedInGrid
{
    [System.ComponentModel.DataAnnotations.Editable(false)]
    public string foobar {get;set;}
}

Aktualisierung:

Bitte entschuldigen Sie, die Antwort war ursprünglich unvollständig. Sie müssen eine benutzerdefinierte Vorlage erstellen, um dies zu handhaben, da die eingebauten Vorlagen dies nicht unterstützen (ich hatte dies in meinem Projekt und vergaß es). Um dies zu tun, erstellen Sie eine Ansicht unter /Views/Shared/EditorTemplates/string.cshtml (Ich werde dies in Razor zeigen, es ist einfach zu aspx Syntax zu portieren, aber).

Der Code würde wie folgt aussehen:

@model string
@if(ViewData.ModelMetadata.IsReadOnly){
    @Html.DisplayForModel()
}else{
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" })
}

Dadurch wird das Metadatenattribut "Bearbeitbar" korrekt verarbeitet. Natürlich ist dies nur für String, sollten Sie etwas ähnliches für andere Objekte zu tun. Wenn Sie wissen möchten, wie andere Build-in-Vorlagen aussehen, besuchen Sie diese Website: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html

Nebenbemerkung zur Leistung: Wenn Sie dies nur an einer Stelle in wenigen Stellen in der Anwendung tun, ist es wahrscheinlich besser, es stattdessen unter /Views/YourView/EditorTemplates/ zu platzieren. Der Grund dafür ist, dass die eingebauten Vorlagen in das Framework kompiliert sind und im Allgemeinen schneller funktionieren. Alternativ lassen Sie es in Shared-Ordner, aber nennen Sie es etwas wie ExtendedString, und dann in Sie Ansicht-Tag-Eigenschaften, die Sie mit expliziten UI-Hinweis wie so Editable gesetzt:

[System.ComponentModel.DataAnnotations.Editable(false)]
[System.ComponentModel.DataAnnotations.UIHint("ExtendedString")]
public string foobar {get;set;}

6voto

Nikolay Kostov Punkte 15314

Gemäß der KendoUI Dokumentation ( http://docs.telerik.com/kendo-ui/aspnet-mvc/validation ) sollten Sie die Eigenschaft mit [HiddenInput(DisplayValue = false)]

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }

Getestet und funktioniert.

4voto

Curtis Yallop Punkte 5900

Eine ähnliche, einfachere, aber weniger allgemeine Lösung ist die Verwendung einer benutzerdefinierten Editorvorlage:

column.Bound(a => a.foobar).EditorTemplateName("Empty");

Dann legen Sie "Empty.cshtml" in Ihre Views/Shared/EditorTemplates mit nichts darin.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X