C# 导致模型状态无效的下拉菜单。ASP.NETMVC3
我的web应用程序中有注册视图。但是,帐户注册将不成功,我的下拉菜单将以红色显示 这是我的下拉代码:C# 导致模型状态无效的下拉菜单。ASP.NETMVC3,c#,asp.net-mvc,asp.net-mvc-3,drop-down-menu,C#,Asp.net Mvc,Asp.net Mvc 3,Drop Down Menu,我的web应用程序中有注册视图。但是,帐户注册将不成功,我的下拉菜单将以红色显示 这是我的下拉代码: <div class="editor-label"> @Html.LabelFor(model => model.CompanyId, "Company") </div> <div class="editor-field"> @Html.DropDownList("Companies", "<Select Compan
<div class="editor-label">
@Html.LabelFor(model => model.CompanyId, "Company")
</div>
<div class="editor-field">
@Html.DropDownList("Companies", "<Select Company>")
</div>
调试时,我发现ModelState.IsValid
返回false,因此重新返回视图(在我的例子中,重新设置ViewBag.companys
)
如何成功完成注册?我确实在参数内填写了每个必填字段。不需要选择公司当我未选择公司时,ModelState.IsValid
返回true并运行代码。但是,我希望用户可以选择与其公司关联
谢谢。DropDownList在ASP.NETMVC3中有点奇怪。它将不会正确绑定到SelectListItem的可枚举项。您需要将绑定的选定选项存储到模型中的基本体,并将所有选项的列表存储在单独的字段中
<div class="editor-label">
@Html.LabelFor(model => model.CompanyId, "Company")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CompanyId, new SelectList(Model.Companies))
</div>
作为旁注,我建议将IEnumerable改为IList。下拉菜单肯定关心数据的显示顺序,因此您的模型应该反映这一点。为什么需要设置
ViewBag.companys
,而您有更好的方法-将选择列表放入模型中?不需要使用丑陋的可视包
你应该有这样的东西
视图模型
public class RegisterViewModel
{
[Display(Name = "Company")]
public int? CompanyId { get; set; }
public IEnumerable<SelectListItem> Companies { get; set; }
}
在我看来
<div class="editor-label">
@Html.LabelFor(model => model.CompanyId, "Company")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CompanyId, Model.Companies, "<Select Company>")
</div>
@Html.LabelFor(model=>model.CompanyId,“公司”)
@Html.DropDownListFor(model=>model.CompanyId,model.companys,“”)
这将在服务器上正确绑定您的
公司ID
。如果您选择的变量类型不是字符串,则您的模型状态对于您的下拉列表将始终无效。将CompanyId更改为string。您仍然可以使用IEnumerable companys{get;set;}模型状态中的错误是什么?错误应该在ModelState.Values
{System.invalidoOperationException:从类型'System.String'到类型'System.Web.Mvc.SelectListItem'的参数转换失败,因为没有类型转换器可以在这些类型之间转换。在System.Web.Mvc.ValueProviderResult.ConvertSimpleType(CultureInfo culture,Object value,Type destinationType)@nemesv^^^我现在正在研究这个。对于公共字符串CompanyId
,为什么不int CompanyId
?这样会给我一个无效操作异常。RegisterViewModel=new RegisterViewModel();viewModel.companys=new SelectList(db.companys,“CompanyId”,“CompanyName”);返回视图(viewModel);我以前尝试过这种方式,但由于类似的问题而被阻止。非常感谢您对更正此问题的任何帮助。您确定您完全复制了我发布的视图部分吗?我一直使用这种模式,而且效果很好。我只是重新整理了所有内容,它对我很有效。您一定在某个地方有一些旧代码-或者我不知道什么是无效的异常原因:)很好。我有一个db insert错误,引发了异常。再次感谢。
[Display(Name = "Company")]
public string CompanyId { get; set; }
public IEnumerable<string> Companies { get; set; }
ViewBag.Companies = db.Companies;
public class RegisterViewModel
{
[Display(Name = "Company")]
public int? CompanyId { get; set; }
public IEnumerable<SelectListItem> Companies { get; set; }
}
[HttpGet]
public ActionResult Register()
{
RegisterViewModel viewModel = new RegisterViewModel();
viewModel.Companies = new SelectList(db.Companies, "CompanyId", "CompanyName");
return View(viewModel);
}
<div class="editor-label">
@Html.LabelFor(model => model.CompanyId, "Company")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CompanyId, Model.Companies, "<Select Company>")
</div>