2017-10-09 144 views
0

問題與MVC問題的下拉列表中MVC

新來的MVC我有MVC中的下拉列表中的問題,你可以幫我與

下面是代碼的下拉列表我使用從數據庫獲取數據

public static List<AppDetailsDTO> GetAllApplications() 
{ 
    string[] arrRoles = new string[] { }; 
    List<AppDetailsDTO> lstAppDetails = new List<AppDetailsDTO>(); 
    using (ApplicationSecurityContext objSecurityContext = new ApplicationSecurityContext()) 
    { 
    var appDetails = objSecurityContext.Applications.Select(app => new AppDetailsDTO() { AppId= app.id, AppName= app.name }).Distinct().ToList(); 
    if (appDetails.Count() > 0) 
    { 
     lstAppDetails = appDetails; 
    } 
    } 
return lstAppDetails; 
} 

AppDetailsDTO類看起來如下

public class AppDetailsDTO 
{ 
    public int AppId { get; set; } 
    public string AppName { get; set; } 
} 

視圖模型這是在視圖中使用是如下

public class ClientApplicationViewModel 
{ 
    public string selectedAppID; 
    public SelectList AppSelectionList { get; set; } 
} 

控制器代碼是如下

[HttpGet] 
public ActionResult AssignApplication() 
{ 
    List<AppDetailsDTO> lstAvailableApps = new List<AppDetailsDTO>(); 
    lstAvailableApps = SecurityDAL.GetAllApplications(); 
    ClientApplicationViewModel objModel = new ClientApplicationViewModel(); 
    objModel.AppSelectionList = new SelectList(lstAvailableApps, "AppId", "AppName"); 
    return View(objModel); 
} 

[HttpPost] 
public void AssignApplication(ClientApplicationViewModel model) 
{ 
    string id = model.selectedAppID.ToString(); 
} 

我使用視圖如下

@model MVCWINDOWSAUTHENTICATION.Models.ClientApplicationViewModel 
@{ 
ViewBag.Title = "AssignApplication"; 
} 

<h2>AssignApplication</h2> 

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 
<div class="form-horizontal"> 
<h4>ClientApplicationViewModel</h4> 
<hr /> 
@Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
<div class="form-group"> 
<div class="col-md-offset-2 col-md-10"> 
@Html.DropDownListFor(model => model.selectedAppID, Model.AppSelectionList, "Select Application") 
</div> 
</div> 
<div class="form-group"> 
<div class="col-md-offset-2 col-md-10"> 
<input type="submit" value="Create" class="btn btn-default" /> 
</div> 
</div> 
</div> 
} 
<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

,我的問題得到下拉列表正在填充,但當我發佈表單時,它獲取發佈,並在控制器後的方法,但在控制器,但selectedAppID和AppSelectionList來了一個s null。

請幫助我,讓我知道我在這做錯了什麼。

感謝您在這方面的幫助。

回答

1

對於MVC模型綁定工作,要自動從表單提交綁定的所有項目都必須性能

public class ClientApplicationViewModel 
{ 
    public string selectedAppID { get; set; } // <-- add this 
} 

在一個單獨的說明,解釋如AppSelectionList一般不屬於該模型的一部分,因爲它們不應該回發給控制器。該模型應該只包含用戶選擇或輸入的值,而不包含可能值的列表。這種'助手'列表通常使用ViewBag中的值從控制器發送到視圖。

因此,請刪除模型中的AppSelectionList。在控制器中的代碼就變成這樣:

ViewBag.AppSelectionList = new SelectList(lstAvailableApps, "AppId", "AppName"); 

並在視圖使用這樣的:

@Html.DropDownListFor(model => model.selectedAppID, ViewBag.AppSelectionList, "Select Application") 

最後,如果你想填充在這兩種情況下的列表(即無論是GET和POST。 ),那麼ViewBag的init代碼應該是的兩部分的操作方法。

+0

彼得感謝您指出我犯的錯誤,我將其更改爲財產。我能夠獲得所選App的值,但AppSelectionList仍顯示爲空。你能不能讓我知道爲什麼是 –

+0

請看我的更新。這幾乎是一個單獨的問題,但仍然如此。 –

+0

感謝Peter的更新,並以更好的方式理解事物。 –