Mah*_*344 2 c# asp.net-mvc asp.net-mvc-4
我的 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);
}
Run Code Online (Sandbox Code Playgroud)
数据已正确填充,如下图所示
但是当它提交回控制器时,模型状态无效并给出错误。
并查看模型
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; }
....
}
Run Code Online (Sandbox Code Playgroud)
视图如下
....
@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" />
}
Run Code Online (Sandbox Code Playgroud)
小智 5
发生错误是因为视图中的以下代码行
@Html.HiddenFor(model => model.Companies)
Run Code Online (Sandbox Code Playgroud)
如果你检查它生成的 html,它将是
<input ... name="Companies" value="System.Collections.Generic.List`1[System.Web.Mvc.SelectListItem]" />`
Run Code Online (Sandbox Code Playgroud)
当您提交表单时,DefaultModelBinder
尝试将属性绑定Companies
到该值并失败(您不能将属性绑定IEnumerable<SelectListItem>
到 a string
)。
删除该行代码。如果您需要返回视图,因为由于ModelState
其他原因无效,请在返回视图之前重新填充 SelectList。
归档时间: |
|
查看次数: |
5219 次 |
最近记录: |