2

因爲我們有希望提供援助的問題ASP.Net MVC3新手。 (在該線程的底部問題了。)從局部視圖傳遞一個選擇的值到主視圖的視圖模型

首先,我不知道,如果下面是去了解這個所以請讓我知道,如果我們在錯誤的方向前進的最佳途徑。我們希望使用部分視圖來查看下拉列表。在某些情況下,查找會在多個地方進行,並另外,數據是不是我們的視圖模型的一部分。數據可能來自我們應用程序中的數據庫或Web服務。一些數據在啓動時加載,一些數據基於表單中選擇的其他值。

我們呼籲我們的主視圖一個孩子的行動,並傳回我們得到的數據的局部視圖。一旦用戶選擇他們的選擇,我們不知道如何將選擇的物品代碼存儲在我們的主視圖模型中。

在我們的主要形式,我們稱之爲一個動作:

@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") 
     ... 

在PersonalInfo控制器:

[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); 
    } 

在_DisplayCounties局部視圖:

@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)?是否存在調用子動作/局部視圖的任何問題;即它在啓動時被加載,並且該方法是否可以用於包括用戶選擇作爲查找的過濾器?如果是這樣,那麼該值如何傳遞給子控制器; viewbag?

回答

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」,new { state = Model.State //或任何屬性被稱爲 })'然後,控制器想以下:'[ChildActionOnly] 公共的ActionResult DisplayCounties(字符串狀態) { IList的 countiesDB = _db.Counties .OrderBy(R => r.CountyDescr) 。凡(R = > r.State == ** **狀態&& == r.Country「USA」) .ToList();' – user727500

+1

所以調用部分動作的結果是我與主視圖內顯示的局部視圖縣下拉列表。 (目前這個工作。)任何想法如何將選定的代碼分配回主視圖模型? – user727500