![](/img/trans.png)
[英]C# MVC HttpPost Failed – ViewModel ModelState Issue (The parameter conversion from type 'System.String'…)
[英]The parameter conversion from type 'System.String' to type 'System.Web.Mvc.SelectListItem' failed
我的 MVC 应用程序出错。 我有一些文本字段和一个下拉列表的页面。 当我提交页面时,数据正确加载到该页面, ModelState
返回错误
从类型“System.String”到类型“System.Web.Mvc.SelectListItem”的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。
控制器方法
public ActionResult Edit(string id)
{
....
EditUserViewModel vm = new EditUserViewModel()
.... // populate the view model including its SelectList properties
return View(vm);
}
数据按照下图正确填充
但是当它提交回控制器时,模型状态无效并给出错误。
和视图模型
public class EditUserViewModel
{
public string UserID { get; set; }
public string SelectedRoleName { get; set; }
public IEnumerable<SelectListItem> Roles { get; set; }
public string SelectedCompanyID { get; set; }
public IEnumerable<SelectListItem> Companies { get; set; }
....
}
视图如下
....
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.UserID)
@Html.DropDownListFor(model => model.SelectedRoleName, Model.Roles)
@Html.DropDownListFor(model => model.SelectedCompanyID, Model.Companies,
@Html.HiddenFor(model => model.Companies)
....
<input type="submit" value="Save" class="btn btn-default" />
}
由于视图中的以下代码行而发生错误
@Html.HiddenFor(model => model.Companies)
如果您检查它正在生成的 html,它将是
<input ... name="Companies" value="System.Collections.Generic.List`1[System.Web.Mvc.SelectListItem]" />`
当您提交表单时, DefaultModelBinder
尝试将属性Companies
绑定到该值并失败(您不能将IEnumerable<SelectListItem>
属性绑定到string
)。
删除那行代码。 如果由于其他原因ModelState
无效而需要返回视图,则在返回视图之前重新填充 SelectLists。
我通过删除 {get; 解决了这个错误。 set;} 来自 SelectListItem 属性
public IEnumerable<SelectListItem> Companies { get; set; }
替换为
public IEnumerable<SelectListItem> Companies
更改输入名称。
$(document).ready(function () {
$('#Companies').attr('name', ' ');
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.