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 class 如下所示
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>
我正在获取下拉列表的问题正在填充,但是当我 post 编辑表单时,它得到 posted 并出现在控制器 post 方法中,但是在控制器,但 selectedAppID 和 AppSelectionList 为空。
请帮我解决这个问题,让我知道我在这方面犯了什么错误。
感谢您在这方面的帮助。
要使 MVC 模型绑定起作用,您希望从表单 Post 自动绑定的所有项目都必须是 properties:
public class ClientApplicationViewModel
{
public string selectedAppID { get; set; } // <-- add this
}
另外,AppSelectionList 等列表通常不是模型的一部分,因为它们永远不应回发到控制器。模型应该只包含用户选择或输入的值,而不是可能值的列表。这样的 'helper'-Lists 通常使用 ViewBag
.
中的值从控制器发送到视图
所以请从模型中删除 AppSelectionList。然后Controller中的代码变成了这样:
ViewBag.AppSelectionList = new SelectList(lstAvailableApps, "AppId", "AppName");
并在视图中使用:
@Html.DropDownListFor(model => model.selectedAppID, ViewBag.AppSelectionList, "Select Application")
最后,如果您想在两种情况下都填充列表(即 GET 和 POST),那么 ViewBag 初始化代码应该是 both[=33 的一部分=] 动作方法。
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 class 如下所示
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>
我正在获取下拉列表的问题正在填充,但是当我 post 编辑表单时,它得到 posted 并出现在控制器 post 方法中,但是在控制器,但 selectedAppID 和 AppSelectionList 为空。
请帮我解决这个问题,让我知道我在这方面犯了什么错误。
感谢您在这方面的帮助。
要使 MVC 模型绑定起作用,您希望从表单 Post 自动绑定的所有项目都必须是 properties:
public class ClientApplicationViewModel
{
public string selectedAppID { get; set; } // <-- add this
}
另外,AppSelectionList 等列表通常不是模型的一部分,因为它们永远不应回发到控制器。模型应该只包含用户选择或输入的值,而不是可能值的列表。这样的 'helper'-Lists 通常使用 ViewBag
.
所以请从模型中删除 AppSelectionList。然后Controller中的代码变成了这样:
ViewBag.AppSelectionList = new SelectList(lstAvailableApps, "AppId", "AppName");
并在视图中使用:
@Html.DropDownListFor(model => model.selectedAppID, ViewBag.AppSelectionList, "Select Application")
最后,如果您想在两种情况下都填充列表(即 GET 和 POST),那么 ViewBag 初始化代码应该是 both[=33 的一部分=] 动作方法。