2

ASP.Net MVC3 초보자에게 도움이 필요한 문제가 있습니다. (이 글의 맨 아래에있는 질문들도 있습니다.)부분 뷰에서 선택한 값을 기본 뷰의 뷰 모델로 전달

우선 다음과 같은 것이 가장 좋은 방법인지 잘 모르겠습니다. 잘못된 방향으로 가고 있다면 알려주세요. 부분 뷰를 사용하여 드롭 다운 목록 조회를하고 싶습니다. 일부 경우 조회가 여러 위치에서 수행되며 데이터는 Google의 조회 모델에 포함되지 않습니다. 데이터는 응용 프로그램의 데이터베이스 또는 웹 서비스에서 가져온 것일 수 있습니다. 일부 데이터는 시작시로드되고 일부는 양식에서 선택된 다른 값을 기반으로합니다.

우리는 기본보기에서 하위 작업을 호출하고 우리가 얻은 데이터로 부분보기를 반환합니다. 사용자가 선택한 항목을 선택하면 선택한 항목 코드를 기본보기 모델에 저장하는 방법을 알 수 없습니다. PersonalInfo 컨트롤러에서

@model Apps.Model.ViewModels.AVMApplicationInfo 
     ... 
     <div class="editor-label"> 
      @Html.LabelFor(m => m.VMResidencyWTCS.DisplayState) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(m => m.VMResidencyWTCS.DisplayState) 
      @Html.DropDownListFor(m => m.VMResidencyWTCS.DisplayState, Apps.Model.Helpers.ResidencyStates.StateList) 
      @Html.ValidationMessageFor(m => m.VMResidencyWTCS.DisplayState) 
     </div> 
     @Html.Action("DisplayCounties", "PersonalInfo") 
     ... 

: 다음 _DisplayCounties 부분보기에서

[ChildActionOnly] 
    public ActionResult DisplayCounties() 
    { 
     IList<County> countiesDB = _db.Counties 
      .OrderBy(r => r.CountyDescr) 
      .Where(r => r.State == "WI" 
      && r.Country == "USA") 
      .ToList(); 

     //Create an instance of the county partial view model 
     VMCounty countyView = new VMCounty(); 

     //Assign the available counties to the view model 
     countyView.AvailableCounties = new SelectList(countiesDB, "CountyCd", "CountyDescr"); 

     return PartialView("_DisplayCounties", countyView); 
    } 

:

@model Apps.Model.ViewModels.VMCounty 
<div class="editor-label"> 
    @Html.LabelFor(m => m.CountyDescr) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(x => x.SelectedCountyCd, Model.AvailableCounties) 
</div> 

가 어떻게 할당 할 우리의 주요 형태에서

우리는 행동에 전화 SelectedCountyCd를 기본 폼보기 모델 (Apps.Model.ViewModels.AVMApplicationInfo)의 필드에 추가합니까? 하위 작업/부분보기가 호출 될 때 문제가 있습니까? 즉, 시작할 때로드되고이 방법을 사용하여 조회를위한 필터로 사용자 선택을 포함 할 수 있습니까? 그렇다면 자식 컨트롤러에 값을 전달할 수있는 방법은 무엇입니까? 뷰백?

답변

1

당신은 아이의 행동을 매개 변수로 전달할 수 :

@model Apps.Model.ViewModels.AVMApplicationInfo 
... 
@Html.Action("DisplayCounties", "PersonalInfo", new { 
    selectedCountyCd = Model.CountyCd // or whatever the property is called 
}) 

다음 자식 작용을 매개 변수로이 값을 :

[ChildActionOnly] 
public ActionResult DisplayCounties(string selectedCountyCd) 
{ 
    IList<County> countiesDB = _db.Counties 
     .OrderBy(r => r.CountyDescr) 
     .Where(r => r.State == "WI" 
     && r.Country == "USA") 
     .ToList(); 

    //Create an instance of the county partial view model 
    VMCounty countyView = new VMCounty(); 

    //Assign the available counties to the view model 
    countyView.AvailableCounties = new SelectList(countiesDB, "CountyCd", "CountyDescr"); 

    // assign the selected value to the one passed as parameter from the main view 
    countyView.SelectedCountyCd = selectedCountyCd; 

    return PartialView("_DisplayCounties", countyView); 
} 
+0

나는 당신이 나를 수 있도록 제안 어떻게 생각 룩업을위한 필터로서 사용자 선택을 전달할 수있다. @model Apps.Model.ViewModels.AVMApplicationInfo ... @ Html.Action ("DisplayCounties", "PersonalInfo", 새 { state = Model.State // 또는 속성이 무엇이든간에 이라고 부름) })'그러면 상기 제어기는 다음 싶습니다 '[ChildActionOnly] 공개 ActionResult의 DisplayCounties (문자열 상태) { IList의 countiesDB = _db.Counties .OrderBy (R => r.CountyDescr) 어디에요 (R = > r.State == ** state ** && r.Country == "USA") .ToList(); ' – user727500

+1

부분 작업을 호출 한 결과로 메인 뷰 내에 부분보기가 표시됩니다. 카운티의 드롭 다운 목록. (현재 작동 중입니다.) 선택한 코드를 주 뷰 모델에 어떻게 다시 할당 할 것인지 생각할 수 있습니까? – user727500

관련 문제