2014-05-06 81 views
1

我目前能夠將我的Kendo Grid上的所有記錄提交回控制器,但它並不反映單選按鈕的最新狀態。我不想多次點擊單元格,進入編輯模式,也不需要使用編輯按鈕。我只想簡單地做一個單選按鈕選擇,點擊保存並且將當前狀態反映在我的控制器上。Kendo UI Grid - 如何保存當前單選按鈕狀態

Razor視圖

@model IEnumerable<ECM.DAL.ViewModels.Roles.AcctAppUserRoles> 

@using ECM.DAL.Infrastructure.Managers 
@using GridEditMode = Kendo.Mvc.UI.GridEditMode 
@{ 
    ViewBag.applicationType = (int)SystemWideConfiguration.ApplicationTypes.ECM; 
    ViewBag.acctId = RightsManager.AccountId; 
} 

@(Html.Kendo().Grid(Model) 
    .Name("EcmRolesGrid") 
    .Columns(columns => 
       { 
        columns.Bound(x => x.IsActive).Width(46) 
          .ClientTemplate("<input type='radio' name='isActive' value='#= IsActive #' # if (IsActive) { # checked='checked' # } # />") 
          .Title("Select Role") 
          .HtmlAttributes(new {style = "text-align:center"}); 
        columns.Bound(r => r.RoleName).Width(75); 
        columns.Bound(r => r.RoleDescription).Width(125); 
       }) 
    .HtmlAttributes(new { style = "height:340px;" }) 
    .Editable(editable => editable.Mode(GridEditMode.InLine)) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .ServerOperation(false) 
     .Model(model => model.Id(p => p.UserId)) 
     .Read(read => read.Action("GetApplicationAndAccountRoles", "User", new { applicationType = ViewBag.applicationType, acctId = ViewBag.acctId, userId = ViewBag.EcmRoleUserId.ToString() })) 
     .Update(update => update.Action("SaveApplicationRoles", "User"))) 
    ) 

控制器:

[AcceptVerbs(HttpVerbs.Post)] 
     [HandleAjaxReturnableException] 
     public void SaveApplicationRoles(IEnumerable<AcctAppUserRoles> updatedRoles) 
     { 
      var userRoleDal = new UserRoleDal(); 
      var roleDal = new RoleDal(); 

      var applicationId = Guid.Empty; 
      var userId = Guid.Empty; 

      if (updatedRoles != null) 
      ... 

的Javascript(我用這個,因爲我有這個觀點與幾個網格幾個選項卡)

function EcmRolesGridHasChanges() { 
     $.ajax({ 
      url: 'user/SaveApplicationRoles', 
      cache: false, 
      type: 'POST', 
      contentType: 'application/json;', 
      charset:'utf-8', 
      data: JSON.stringify($("#EcmRolesGrid").data().kendoGrid._data) 
     }); 
    } 

讓我給你也是一個視覺的人......

網格最初加載時,選擇「訂單輸入」角色。 (未顯示)

我現在會選擇 「受限用戶」

enter image description here

當我點擊保存這就是我得到的控制器上:

enter image description here

我期待第一個是假的,第二個是真的,第三個是假的。

任何想法?

謝謝。

回答

2

您需要設置單選按鈕的點擊模式,讓電網知道特定行已經被設置爲髒,因此有更新的模型火更新事件值

等單選按鈕,單擊添加此..

***************************網格*******************

columns.Bound(x => x.IsActive).Width(46) 
.ClientTemplate("<input type='radio' name='isActive' value='#= IsActive #' # if (IsActive) { # checked='checked' # } # onclick='radioBoxClick(this)' />") 

**********************腳本****************** **

//複選框,單擊功能

function radioBoxClick(e) { 

     grid = $("kendoGrid").data().kendoGrid; 
     var dataItem = grid.dataItem($(e).closest('tr')); 
     var model = grid.dataSource.get(dataItem.UserId);   
     model.set("isActive", e.checked ? 1 : 0);   

    } 
+0

我不得不做小的修改。但是你的回答讓我走向正確的方向。 –

0

輕微修改該Shaz和Jayesh Goyani提供了答案。
下面的函數會覆蓋其他單選按鈕並將其設置爲false。

 function radioBoxClick(e) { 

     var grid = $("#EcmRolesGrid").data().kendoGrid; 
     var elementCount = grid.dataSource._data.length; 
     var dataItem = grid.dataItem($(e).closest('tr')); 
     var model = grid.dataSource.get(dataItem.RoleId); 

     model.set("IsActive", e.checked ? 1 : 0); 

     for (var i = 0; i < elementCount; i++) { 
      var elem = grid.dataSource._data[i]; 

      if (elem.RoleId != model.RoleId) 
       elem.set("IsActive", 0); 
     } 
    }