繁体   English   中英

从类型“System.String”到类型“System.Web.Mvc.SelectListItem”的参数转换失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM