2017-12-07 4 views
0

モデルをグリッドにバインドして選択肢を取得しようとしています。私はモデルを渡して、選択のためのチェックボックスと一緒に私が期待するデータを表示することができます。しかし、モデルをコントローラーに戻そうとすると、最初は選択変更を行わずにビューに最初に渡された同じモデルを戻すように見えます。モデルをグリッドにバインドしてポストバックする選択

ビュー:

@model ExViewModel 

@(Html.Kendo().Grid(Model.Classes) 
.Name("grid") 
.Columns(columns => 
{ 
    columns.Bound(c => c.IsChecked).ClientTemplate("<input type='checkbox' #= IsChecked ? checked='checked':'' # class='chkbx' />" + "<input type='hidden' name='id' value='#= IsChecked#' />").Width(50); 
    columns.Bound(c => c.Name).Width(175); 
    columns.Bound(c => c.Details).Width(175); 
}) 
.Scrollable().Groupable().Sortable().Filterable() 
.DataSource(dataSource => dataSource 
      .Ajax() 
      .Batch(true) 
      .ServerOperation(false) 
      ) 
) 

@using (Html.BeginForm("CallNext", "Home", FormMethod.Post)) 
{ 
    <input hidden="hidden" id="model_output" name="model_output" value="@(Json.Encode(Model))" /> 
    <input id="btnSubmit" class="btn btn-primary" type="submit" value="Next >" /> 
} 

<script> 
    $(function() { 
     $('#grid').on('click', '.chkbx', function() { 
      var checked = $(this).is(':checked'); 
      var grid = $('#grid').data().kendoGrid; 
      var dataItem = grid.dataItem($(this).closest('tr')); 
      dataItem.set('IsChecked', checked); 
     }) 
    }) 
</script> 

はコントローラー:上記を使用して

[HttpPost] 
public ActionResult CallNext(string model_output) 
{ 
. . . 
} 

、私はコントローラに戻って取得model_outputはクラスのにisCheckedフラグのためのすべてのデフォルト値を持っています。私は何が見落とされているのか分かりません - 私はいくつかの例をオンラインで見ましたが、私は剣道の経験があまりないので、何がうまくいかないのか分かりません。アドバイスをいただければ幸いです。

+0

この 'Json.Encode(Model)'は、剃刀ページがhtmlにレンダリングされた後も一定です。つまり、チェックボックスをクリックすると、この 'Model'オブジェクトは同じままです。カスタムチェックボックスが必要ですか?剣道のUIには行の選択が用意されていますか? –

+0

残念ながら、チェックボックスが必要です。データを渡す他の方法はありますか?たとえば、ビューバックでモデルを渡した場合は更新できますか? – user1267983

+0

クリックハンドラが実行されていることを確認できますか?私はイエスを推測するでしょう。 – Richard

答えて

0

クリックハンドラが実行中であることを確認できますか?私はイエスを推測するでしょう。

value="@(Json.Encode(Model))"がページビューランタイムではなくページレンダリング時に構築されるため、フォームは元のモデルをポストします。

グリッドにsaveChanges

$('#grid').data("kendoGrid").saveChanges(). 

でsaveChangesを実行するために、送信ボタンを変更してみてくださいは、データソースの同期を呼び出します。

ツールバーを使用することもできます。彼らはさらに配管工事を行います。詳細はdemosをご覧ください。

関連する問題