[英]Issue with Drop Down list in 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; }
}
視圖中使用的ViewModel如下
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變為null。
請幫助我,讓我知道我在這方面犯了什么錯誤。
感謝您在這方面的幫助。
為了使MVC模型綁定起作用,要從Form Post自動綁定的所有項目都必須是屬性 :
public class ClientApplicationViewModel
{
public string selectedAppID { get; set; } // <-- add this
}
單獨說明一下,諸如AppSelectionList之類的列表通常不屬於模型,因為它們永遠不應回發到Controller。 模型應僅包含用戶選擇或輸入的值,而不應包含可能值的列表。 通常使用ViewBag
的值將此類“幫助程序”列表從Controller發送到View。
因此,請從模型中刪除AppSelectionList 。 然后,Controller中的代碼將變為:
ViewBag.AppSelectionList = new SelectList(lstAvailableApps, "AppId", "AppName");
並在視圖中使用此:
@Html.DropDownListFor(model => model.selectedAppID, ViewBag.AppSelectionList, "Select Application")
最后,如果您想在兩種情況下(例如,對於GET和POST都填充)列表,則ViewBag初始化代碼應該是這兩種操作方法的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.