簡體   English   中英

MVC中的下拉列表問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM