0

私はかなりの間これを苦労しています。グリッド内にいくつかのドロップダウンリストがある剣道グリッドがあります。外部キー列を使用してグリッドにドロップダウンリストを配置します。インライン編集のグリッドは、選択したドロップダウンリストの値をコントローラに送信せず、古い値を送信します。私は何がうまくいかないとはっきりしていません。どんなリードも非常に役立つでしょう。ForeignKeyを送信する剣道グリッドの列の値をインライン編集のコントローラに入力します

コード:

ビュー

 @(Html.Kendo().Grid(Model.App_Client_Mapping) 
    .Name("AppAccountInternalGrid") 
    .Events(ev => ev.Edit("OnGridEdit")) 
    .Columns(columns => 
    { 

     columns.Bound(p => p.AccountMappingID).Title("AccountMappingID").Width(130).Hidden(true); 

     columns.ForeignKey(p => p.Level1ID, (System.Collections.IEnumerable)ViewData["level1"], "Level1ID", "Level1").Title("Level 1").Width(150).HtmlAttributes(new { id = "Level1Dropdown", data_value_primitive = true }); 

     columns.ForeignKey(p => p.Level2ID, (System.Collections.IEnumerable)ViewData["level2"], "Level2ID", "Level2").Title("Level 2").Width(150).HtmlAttributes(new { id = "Level2Dropdown" }); 

     columns.Bound(p => p.ExternalAccount).Title("ExternalAccount").Width(150); 
}) 

     .Editable(editable => editable.Mode(GridEditMode.InLine)) 
     .DataSource(dataSource => dataSource 
      .Ajax() 
      .PageSize(50) 
      .Model(model => 
      { 
       model.Id(p => p.AccountMappingID); 
       model.Field(p => p.AccountMappingID).Editable(false);     
       model.Field(p => p.Level1ID).DefaultValue(1).Editable(true); 
       model.Field(p => p.Level1).Editable(true); 
       model.Field(p => p.Level2ID).DefaultValue(0).Editable(true); 
       model.Field(p => p.Level2).Editable(true);  
      } 


      ) 

      .Update("EditingInline_Update", "AppAccounts") 
      .ServerOperation(false) 
    ) 



       ) 

コントローラー:

グリッドは、このアクションからデータを取得します。ビューにはグリッドと他の要素があるので、ビューモデルをバインドしました。

public ActionResult AppInternal(int clientid) 
    { 
    var result = new AppViewModel(); 

    result.App_Client_Mapping=_unitofwork.AppInternal.Get(clientid); 

     var level1 = level1list.Select(x => new App_Client_Mapping 
       { 

        Level1ID = x.LevelID, 
        Level1 = x.Level1 
       }).ToList(); 

    var level2 = level2list.Select(x => new App_Client_Mapping 
       { 

        Level2ID = x.Level2ID, 
        Level2 = x.Level2 

       }).ToList(); 

      ViewData["level1"] = level1; 

       ViewData["level2"] = level2; 

    } 
    [AcceptVerbs(HttpVerbs.Post)] 
      public ActionResult EditingInline_Update([DataSourceRequest] DataSourceRequest request, App_Client_Mapping mapping) 
     { 
      //save the mapping in the database tables 

        return Json(new[] { mapping }.ToDataSourceResult(request, ModelState)); 
    } 

ビューモデル:

AppViewModel:EFから

public class AppMappingViewModel 
{ 
public IEnumerable<App_Client_Mapping> App_Client_Mapping { get; set; } 

//other fields 

} 

自動生成app_client_mappingクラス:

public class app_client_mapping 
    { 
    public int AccountMappingID{get;set;} 
    public int Level1ID{get;set;} 
    public string Level1{get;set;} 
    public int Level2ID{get;set;} 
    public string Level2{get;set;} 
    public string ExternalAccount{get;set;} 
    } 

データセットがコントローラに渡されます。グリッド内の外部ローカル量(テキストボックス)の更新された値のみが送信されます。更新されたドロップダウン値はグリッドに送信されません。なぜこれが起こっているかについてのアイデアは大きな助けになるでしょう。

ありがとうございます!

+0

は、あなたのモデルを表示することができます:

@model object @(Html.Kendo().ComboBoxFor(m => m) .BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"]) .ValuePrimitive(true) ) 

ここにいくつかのコード例がありますコードを使用していますか? – NRW

答えて

0

あなたのグリッドには.Readアクションがありません。

グリッド内でのドロップダウンの方法は次のとおりです。私はそれをあなたのコードに似たものにしようとしました。

コントローラー:

public IActionResult AppInternal() 
{ 
    ViewData["level1"] = _context.level1list.Select(x => new App_Client_Mapping { 
       Level1ID = x.LevelID, 
       Level1 = x.Level1 
      }); // Do not return a .List() 
    // put more dropdowns as required... 
    return View(); 
} 

// return the .Read action from your grid 
public IActionResult Read([DataSourceRequest] DataSourceRequest request) 
{ 
    var result = new AppViewModel(); 
    result.App_Client_Mapping=_unitofwork.AppInternal.Get(clientid); 
    return Json(result.ToDataSourceResult(request)); 
} 

// Update 
public EditingInline_Update([DataSourceRequest] DataSourceRequest request, App_Client_Mapping mapping) 
{ 
    if (ModelState.IsValid) 
    { 
     // update db with the Level1ID from your dropdown 
    } 
    // Return the updated product. Also return any validation errors. 
    return Json(new[] { mapping }.ToDataSourceResult(request, ModelState)); 
} 

ビュー:

columns.ForeignKey(p => p.Level1ID, (System.Collections.IEnumerable)ViewData["level1"], "Level1ID", "Level1").Title("Level 1").Width(150); // Don't need to put HtmlAttributes. 

// The .Read Action should be 
.Read(read => read.Action("Read", "AppAccounts") 

外部キーEditorTemplate:MVC Demo

関連する問題