2012-12-06 13 views
8

w projekcie MVC mam następujący widok, w którym używam Kendo SiatkaMVC modelu wiązania nie działa na Kendo siatki

<%: 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"))) 
%> 

Również mam kontroler gdzie chcę zapisać nowy wpis w Kendo Krata.

[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 
    } 

Problem polega na tym, że typ Milestone (parametr w kontrolerze) jest zawsze wartość null nawet jeśli wprowadzić dane, gdy tworzę nową pozycję w siatce i naciśnij Zapisz. Masz pomysł, co zrobić, aby przekazać wprowadzone dane w parametrze kamienia milowego? Dziękuję z góry

+1

czy sprawdzane w dostarczaniu narzędzi programistycznych, co jest księgowanie do serwera? –

+1

@ BehnamEsmaili to było to widziałem w Skrzypek. http://imageshack.us/f/846/28278518.png/ –

+1

umieść parametr typu FormCollection w swojej akcji i sprawdź, czy ma klucze, których się spodziewasz. –

Odpowiedz

11

jak widziałem w Skrzypek parametrów jest księgowanie z models prefiksu, więc trzeba korzystać z nich tak:

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

Tak, to prawda. I jest to potrzebne z powodu ustawienia '.Batch (true)' siatki. Rozwiązanie jest również opisane w [dokumentacji kendo ui.] (Http://docs.kendoui.com/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/batch-editing) – nemesv

Powiązane problemy