0

나는 꽤 언젠가 이것을 고심하고 있습니다. 그리드 안에 여러 개의 드롭 다운리스트가있는 검도 그리드가 있습니다. 외래 키 열을 사용하여 표에 드롭 다운 목록을 넣었습니다. 인라인 편집의 격자가 선택한 드롭 다운 목록 값을 컨트롤러로 보내지 않고 이전 값을 전송합니다. 무엇이 잘못 될지 잘 모르겠다. 어떤 단서가 도움이 될 것입니다.외래 키 보내기 인라인 편집시 검도 그리드의 열 값을 컨트롤러에 입력

코드 :

그리드는이 작업에서 데이터를 가져옵니다

 @(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