5

Mam siatki Kendo skonfigurować tak:Aktualizacja Kendo siatka o wartości redaktor DropdownList

@(Html.Kendo().Grid<ParticipatingDentalEE>() 
.Name("DentalEE") 
.Columns(columns => 
{ 
    columns.Bound(p => p.State).Title("State").Width(150).EditorTemplateName("State"); 
    columns.Bound(p => p.Count).Title("Count").Width(150); 
    columns.Command(c => { c.Edit(); c.Destroy(); }); 
}) 
.DataSource(dataSource => dataSource 
    .Ajax()   
    .Model(m => { 
     m.Id(p => p.State); 
     m.Field(p => p.State).Editable(true); 
     m.Field(p => p.Count).Editable(true).DefaultValue(""); 
    }) 
    .Create(update => update.Action("EditingInline_Create", "Dental")) 
    .Read(read => read.Action("EditingInline_Read", "Dental")) 
    .Update(update => update.Action("EditingInline_Update", "Dental")) 
    .Destroy(update => update.Action("EditingInline_Destroy", "Dental")) 
) 
//.Scrollable() 
//.Sortable() 
.Editable(e => e.Mode(GridEditMode.InLine)) 

)

„stan” kolumna składa się z szablonu rozwijanej który wygląda tak:

@(Html.Kendo().DropDownList() 
    .Name("States") // Name of the widget should be the same as the name of the property 
    .DataValueField("CODE") // The value of the dropdown is taken from the EmployeeID property 
    .DataTextField("NAME") // The text of the items is taken from the EmployeeName property 
    .BindTo((System.Collections.IEnumerable)ViewData["States"]) // A list of all employees which is populated in the controller 
) 

Moje menu rozwijane wyświetla się prawidłowo podczas edycji lub tworzenia elementu, ale gdy zapiszę element, wartość opuszczenia nie pozostaje w siatce. Czy jest coś jeszcze, co muszę skonfigurować, aby to zrobić?

Odpowiedz

4

jak mówisz w swoim komentarzu,

.Name("States") // Name of the widget should be the same as the name of the property 

to znaczy, musi być zgodna z nazwą kolumny, a nazwa kolumny jest „państwo” nie „USA”.

+0

Tak, masz rację co do tego błędu - jednak odkryłem również, że potrzebuję, aby tekst/wartość były takie same, aby był poprawnie wyświetlany podczas zapisywania. – Goose

+0

Mam tę funkcjonalność działa, ale kiedy wchodzę w tryb edytora, dropdownlist domyślnie do pierwszego elementu w kolekcji ViewBag, a nie rzeczywistej wartości, więc przypadkowa aktualizacja może się zdarzyć, jeśli użytkownik nie ręcznie zmienić listę rozwijaną na to, co jest poprzednio? Czy wiesz, jak obsłużyć ten scenariusz, a nawet użyć DataSource.read na liście rozwijanej zamiast ViewBag – CSharper

0

Nie jestem pewien, czy to rozwiąże problem, ale szablony edytor do mojej sieci nie działa poprawnie dopóki nie ustawić UIHint dekorator w modelu iEditorTemplateName w widoku.

E.g.

public class ParticipatingDentalEE { 
    ... 

    [UIHint("State")] // this should be the name of your EditorTemplate 
    public State State { get; set; } 

} 

I spekulują, że UIHint służy do sieci w trybie „view”, natomiast EditorTemplateName jest używany w trybie „edytuj”, a oba są wymagane, aby połączyć dwa razem.

3

Oczywiście jest to stary wątek, jednak poprawka polega na użyciu metody DropDownListFor (w przeciwieństwie do DropDownList), a nie na określeniu nazwy. Podejrzewam, że Kendo wykonuje pewne wewnętrzne dopasowywanie nazw, aby zastosować zmodyfikowaną wartość z powrotem do modelu.

@model int // ...or whatever type works for your model 

@(Html.Kendo().DropDownListFor(i => i) 
    .DataValueField("CODE") 
    .DataTextField("NAME") 
    .BindTo((System.Collections.IEnumerable)ViewData["States"])) 
+0

Usunięcie "Nazwa" poprawiono dla mnie. –

Powiązane problemy