2012-12-06 15 views
8

In un progetto MVC Ho la seguente vista in cui io uso il Kendo GrigliaMVC Modello Binding non funziona su Kendo Griglia

<%: Html.Kendo().Grid<Milestone>() 
       .Name("MilestonesGrid") 
       .Columns(columns => 
       { 
        columns.Bound(p => p.ContractMilestoneID).Hidden(); 
        columns.Bound(p => p.MilestoneSN).Title("Κωδικός οροσήμου"); 
        columns.Bound(p => p.EstimatedDate).Title("Εκτιμώμενη ημερομηνία"); 
        columns.Bound(p => p.RealDate).Title("Πραγματική ημερομηνία"); 
        columns.Bound(p => p.MilestoneDescription).Title("Περιγραφή"); 
        columns.Bound(p => p.Payment).Title("Πληρωμή"); 
        columns.Bound(p => p.PaymentRate).Title("Ποσοστό πληρωμής"); 
        columns.Bound(p => p.IsCompleted).Title("Έχει ολοκληρωθεί"); 
        columns.Command(command => 
         { 
          command.Edit() 
            .Text("Επεξεργασία") 
            .CancelText("Ακύρωση") 
            .UpdateText("Αποθήκευση"); 

          command.Destroy() 
            .Text("Διαγραφή"); 
         }); 
       }) 
       .ToolBar(toolbar => toolbar.Create().Text("Προσθήκη νέου οροσήμου")) 
       .Editable(editable => editable.Mode(GridEditMode.InLine)) 
       .Sortable() 
       .Pageable() 
       .Filterable() 
       .Resizable(resize => resize.Columns(true)) 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .ServerOperation(true) 
        .Model(model => model.Id(o => o.ContractMilestoneID)) 
        .Model(model => model.Field(o => o.MilestoneSN)) 
        .Model(model => model.Field(o => o.EstimatedDate)) 
        .Model(model => model.Field(o => o.RealDate)) 
        .Model(model => model.Field(o => o.MilestoneDescription)) 
        .Model(model => model.Field(o => o.Payment)) 
        .Model(model => model.Field(o => o.PaymentRate)) 
        .Model(model => model.Field(o => o.IsCompleted)) 
        .Batch(true) 
        .Create(create => create.Action("CreateMilestone", "Milestones")) 
        .Read(read => read.Action("DetailsJson", "Milestones", 
         new { id = ViewBag.ID })) 
        .Update(update => update.Action("UpdateMilestone", "Milestones")) 
        .Destroy(delete => delete.Action("DeleteMilestone", "Milestones"))) 
%> 

Inoltre ho un controller in cui voglio salvare una nuova voce nel Kendo Griglia.

[HttpPost] 
    public ActionResult CreateMilestone([DataSourceRequest] DataSourceRequest request, 
     Milestone milestone) 
    { 
     if (milestone != null && ModelState.IsValid) 
     { 
      using (TADCEntities database = new TADCEntities()) 
      { 
       tblSymvaseisOrosima item = new tblSymvaseisOrosima 
       { 
        fldEstimatedDate = milestone.EstimatedDate, 
        fldIsCompleted = milestone.IsCompleted, 
        fldMilestoneDescription = milestone.MilestoneDescription, 
        fldMilestoneSN = milestone.MilestoneSN, 
        fldPayment = milestone.Payment, 
        fldPaymentRate = milestone.PaymentRate, 
        fldRealDate = milestone.RealDate, 
        fldStoixeioYpoergouID = milestone.ElementSubProjectID 
       }; 

       database.tblSymvaseisOrosima.Add(item); 
       database.SaveChanges(); 

       return Json(new[] { item }.ToDataSourceResult(request, ModelState)); 
      } 
     } 

     return View(); 
     // should also return json 
    } 

Il problema è che il tipo Milestone (il parametro nel controllore) è sempre nullo anche se immettono i dati quando si crea una nuova voce nella griglia e premere Salva. Qualche idea su cosa fare per passare i dati inseriti nel parametro milestone? Grazie in anticipo

+1

Hai controllato nei tool di sviluppo che cosa sta postando server? –

+1

@BehnamEsmaili questo è stato vedere in Fiddler. http://imageshack.us/f/846/28278518.png/ –

+1

inserisci un parametro di tipo FormCollection nell'azione e controlla se contiene le chiavi che stai aspettando. –

risposta

11

Come ho visto nei Fiddler parametri è la pubblicazione con models prefisso, quindi li si deve accedere in questo modo:

public ActionResult CreateMilestone([DataSourceRequest] DataSourceRequest request, 
    [Bind(Prefix="models")] List<Milestone> milestons) 
{ 
    Milestone milestone = milestons[0]; 
    . 
    . 
    . 
} 
+3

Sì, questo è corretto. Ed è necessario a causa dell'impostazione '.Batch (true)' della griglia. E la soluzione è anche descritta nella [documentazione di kendo ui.] (Http://docs.kendoui.com/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/batch-editing) – nemesv

Problemi correlati