我有以下代码 -
查看 -
<% Html.BeginForm(); %>
<div>
<%= Html.DropDownList("DropDownSelectList", new SelectList( Model.DropDownSelectList, "Value", "Text"))%>
控制器 -
public ActionResult Admin(string apiKey, string userId)
{
ChallengesAdminViewModel vm = new ChallengesAdminViewModel();
vm.ApiKey = apiKey;
vm.UserId = userId;
vm.DropDownSelectList = new List<SelectListItem>();
vm.DropDownSelectList.Add(listItem1);
vm.DropDownSelectList.Add(listItem2);
vm.DropDownSelectList.Add(listItem3);
vm.DropDownSelectList.Add(listItem4);
vm.DropDownSelectList.Add(listItem5);
vm.DropDownSelectList.Add(listItem6);
vm.DropDownSelectList.Add(listItem7);
}
[HttpPost]
public ActionResult Admin(ChallengesAdminViewModel vm)
{
if (ModelState.IsValid)//Due to the null dropdownlist gives model state invalid
{
}
}
视图模型 -
public class ChallengesAdminViewModel
{
[Required]
public string ApiKey { get; set; }
[Required]
public string UserId { get; set; }
public List<SelectListItem> DropDownSelectList { get; set; }
}
我不知道为什么它仍然需要列表,虽然不是必需的。我想根据需要只有两个属性。所以我想知道如何声明或更改该列表不是必需的,并使我的模型状态有效。
答案 0 :(得分:6)
我这样做的方法是在我的视图模型中有一个属性,下拉列表将被绑定(可以为空),然后有一个单独的属性,其中包含下拉列表的所有选项。
ViewModel属性
public int? CountryId { get; set; }
public IEnumerable<SelectListItem> CountryOptions { get; set; }
查看
<label for="CountryId">Country:</label>
<%: Html.DropDownListFor(x => x.CountryId, Model.CountryOptions, "N/A")%>
注意:"N/A"
字符串是默认的空值。
HTHS,
查尔斯
聚苯乙烯。这当然是使用ASP.NET MVC 2
答案 1 :(得分:0)
简单的答案是将其从模型中删除并通过ViewData传递。然后,您的模型将包含从列表中选择的值的成员。
答案 2 :(得分:0)
我认为它失败了,因为它无法将单个值(""
)强制转换为SelectListItem
以放入列表中。您只能选择一个DropDownSelectList
值。
您可以尝试改为使用ChallengesAdminViewModel.DropDownSelectList
类型的字符串。然后它将是所选选项的值。 SelectListItems
用于将选项推送到视图,而不是解析发布的结果。