我的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" />
}
答案 0 :(得分:3)
由于视图中的以下代码行而发生错误
select b.id, b.title, b.content, b.reply, sum(v.vote)
from board b
left join vote on b.id = v.id
group by b.id, b.title, b.content, b.reply
如果你检查它正在生成的html,它将是
@Html.HiddenFor(model => model.Companies)
当您提交表单时,<input ... name="Companies" value="System.Collections.Generic.List`1[System.Web.Mvc.SelectListItem]" />`
会尝试将属性DefaultModelBinder
绑定到该值并失败(您无法将Companies
的属性绑定到IEnumerable<SelectListItem>
)
删除该行代码。如果由于其他原因导致string
无效,则需要返回视图,然后在返回视图之前重新填充SelectLists。
答案 1 :(得分:0)
我已通过删除{get;设置;}来自SelectListItem属性
public IEnumerable<SelectListItem> Companies { get; set; }
替换为
public IEnumerable<SelectListItem> Companies
答案 2 :(得分:0)
更改输入名称。
useEffect(() => {
getAllEmailsFromConfirmedUsers(setMyState);
});