如何修复MVC2下拉列表中的转换错误

时间:2012-02-09 20:11:48

标签: c# asp.net asp.net-mvc asp.net-mvc-2

我在ASP.NET MVC2中尝试了简单的下拉列表,但是从tryupdatemodel获得了以下错误。

如何解决这个问题,看起来是否正确?

视图:

   <%= Html.DropDownList("Post24DeliveryPlaces", Model.DeliveryPlace)%>

模型:

public IEnumerable<SelectListItem> Post24DeliveryPlaces { get; set; }

public string DeliveryPlace { get; set; }

结果:

System.InvalidOperationException: The parameter conversion from type 'System.String' to type 'System.Web.Mvc.SelectListItem' failed because no type converter can convert between these types.  

at System.Web.Mvc.ValueProviderResult.ConvertSimpleType(CultureInfo culture, Object value, Type destinationType)  

 at System.Web.Mvc.ValueProviderResult.UnwrapPossibleArrayType(CultureInfo culture, Object value, Type destinationType)  

at System.Web.Mvc.ValueProviderResult.ConvertTo(Type type, CultureInfo culture)   at System.Web.Mvc.DefaultModelBinder.ConvertProviderResult(ModelStateDictionary modelState, String modelStateKey, ValueProviderResult valueProviderResult, Type destinationType

1 个答案:

答案 0 :(得分:1)

问题是您的html输入被命名为Post24DeliveryPlaces并且它正在尝试将单个字符串绑定到该字符串。

Post数据看起来像这样:

POST
{
    Post24DeliveryPlaces = (string)
}

但是,在您的模型中,Post24DeliveryPlaces是一个IEnumerable,它不能将字符串转换为SelectListItem。

Html.DropDownList将字段名称作为第一个参数。尝试更改为此,将交货地点列表作为第二个参数。

Html.DropDownList("DeliveryPlace", Model.Post24DeliveryPlaces)

这将生成Html

<select name="DeliveryPlace">
    <option value="..">....</option>
    ....
</select>