2012-12-06 60 views
8

在MVC項目中,我有以下看法在這裏我使用劍道電網MVC模型綁定上劍道電網不工作

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

而且我有一個控制器在這裏我想保存在劍道一個新條目格。

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

的問題是里程碑式(控制器參數)總是空,即使當我創建的網格和按保存一個新的項目我輸入數據。任何想法爲了在里程碑參數中傳遞輸入的數據要做什麼?謝謝你在前進

+1

你的開發人員工具是什麼張貼到服務器檢查? –

+1

@BehnamEsmaili這是我在小提琴手中看到的。 http://imageshack.us/f/846/28278518.png/ –

+1

在您的操作中放入一個FormCollection類型的參數,並檢查它是否有您期望的鍵。 –

回答

11

正如我在Fiddler中的參數看到與models前綴發佈,所以你應該這樣訪問他們:

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

是的,這是正確的。這是因爲網格的'.Batch(true)'設置所必需的。該解決方案也在[kendo ui documentation]中描述。(http://docs.kendoui.c​​om/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/batch-editing) – nemesv