5

ho una griglia di Kendo impostato in questo modo:griglia Aggiornamento di Kendo con valore editor di 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)) 

)

La colonna "Stato" è costituito da un modello di discesa che assomiglia a questo:

@(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 
) 

Il mio menu a discesa viene visualizzato correttamente quando si modifica o crea un elemento, ma quando si salva l'elemento il valore dell'elenco a discesa non rimane nella griglia. C'è qualcos'altro che ho bisogno di istituire per fare questo?

risposta

4

come dici nel tuo parere,

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

vale a dire, si deve corrispondere al nome della colonna, e il nome della colonna è "Stato" non "Stati".

+0

Sì, hai ragione su quell'errore, ma ho anche scoperto che avevo bisogno che Text/Value fosse lo stesso per poterlo visualizzare correttamente durante il salvataggio. – Goose

+0

Ho questa funzionalità funzionante, ma quando accedo alla modalità editor, l'elenco a discesa imposta automaticamente il primo elemento nella raccolta ViewBag e non il valore effettivo, pertanto potrebbe verificarsi un aggiornamento accidentale se l'utente non modifica manualmente il menu a discesa in base a ciò che è in precedenza? Sai come posso gestire questo scenario, o anche usare DataSource.read sul menu a discesa invece di ViewBag – CSharper

0

non sono sicuro se questo sarà risolvere il problema, ma gli Editor modelli per il mio griglia non ha funzionato correttamente fino a quando avevo impostare il UIHint decoratrice nel modello, e il EditorTemplateName nella vista.

E.g.

public class ParticipatingDentalEE { 
    ... 

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

} 

I ipotizzano che UIHint viene utilizzato per la griglia nella modalità 'visualizzazione', mentre il EditorTemplateName viene utilizzato in modalità 'modifica', ed entrambi sono necessari per collegare i due insieme.

3

Ovviamente questo è un thread precedente, tuttavia la correzione consiste nell'utilizzare il metodo DropDownListFor (in contrapposizione a DropDownList) e non specificare un nome. Sospetto che Kendo faccia qualche abbinamento interno per applicare il valore modificato al modello.

@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

Rimuovere il "Nome" lo ha risolto per me. –

Problemi correlati