私はかなりの間これを苦労しています。グリッド内にいくつかのドロップダウンリストがある剣道グリッドがあります。外部キー列を使用してグリッドにドロップダウンリストを配置します。インライン編集のグリッドは、選択したドロップダウンリストの値をコントローラに送信せず、古い値を送信します。私は何がうまくいかないとはっきりしていません。どんなリードも非常に役立つでしょう。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;}
}
データセットがコントローラに渡されます。グリッド内の外部ローカル量(テキストボックス)の更新された値のみが送信されます。更新されたドロップダウン値はグリッドに送信されません。なぜこれが起こっているかについてのアイデアは大きな助けになるでしょう。
ありがとうございます!
は、あなたのモデルを表示することができます:
ここにいくつかのコード例がありますコードを使用していますか? – NRW