0

私は剣道のMVC階層グリッドを持っています。私の例は読みやすくするために単純化されています。Kendo MVC Grid Createのポップアップエディタテンプレートでモデルが空です。デフォルト値はありません。

  @(Html.Kendo().Grid<LeagueViewModel>(Model.Leagues) 
     .Name("grid_#=LeagueTypeId#") 
     .Columns(columns => { }) 
     .ToolBar(toolbar => 
     { 
      toolbar.Create().Text("Add New League(Window)"); 
     }) 
     .Editable(editable => editable.Mode(GridEditMode.PopUp) 
      .TemplateName("LeagueEdit") 
      .Window(w => 
      { 
       w.Position(p => p.Top(200)); // position not working, need to center more vertically 
       w.Width(800); 
      } 
          ) 
         ) 
     .Events(e => e.Edit("leagueEdit")) 
     .DataSource(dataSource => dataSource 
      .Server() 
      .Model(model => 
      { 
       model.Id(p => p.LeagueID); 
       model.Field(l => l.strSportId).DefaultValue("#=SportId#"); // set default value with parent grid data 
       model.Field(l => l.strLeagueTypeId).DefaultValue("#=LeagueTypeId#"); // set default value with parent grid data 
      } 
      ) 
      .Read(read => read.Action("Bound_League_Read", "Configuration", new { _leagueTypeId = "#=LeagueTypeId#" })) 
      .Create(create => create.Action("League_Create", "Configuration")) 
     ) 
      ) 

ここは私のjavascriptイベントハンドラです。作成ボタンがクリックされた後にハンドラからe.modelオブジェクトを観察すると、DefaultValue( "#= ParentProperty#")でグリッド内で先に設定したデフォルト値があります。

 function leagueEdit(e) { 

       // setting these with default value on model, 
       // had to have string variants to pass over because template expression syntax     
       e.model.SportId = parseInt(e.model.strSportId); 
       e.model.LeagueTypeId = parseInt(e.model.strLeagueTypeId); 

       } 

私のポップアップテンプレートが開きますLeagueEdit.cshtmlは、モデルがデータを持ちません。モデルにデータをどのように取得するのですか?私は、親グリッドからの値を必要とする要素をポップアップエディタに持っています。

 <p>sport: @Model.SportId</p> <!-- value does not carry over --> 
     <p>leaguetype: @Model.LeagueTypeId</p> <!-- value does not carry over --> 

答えて

1

編集イベントで、そのIDを使用してポップアップでコントロールを見つけて、値を設定してみてください。たとえば、以下のコードでは、ポップアップ内にdatepickerを見つけて、その値をmodelプロパティに設定しています。

function LeagueEditEdit(e) { 
    var val1 = e.container.find("input[name=CallDate]").data("kendoDatePicker"); 
    val1.value($('#CallDate').attr('value')); 
    e.model.CallDate = val1._value; 
} 
関連する問題