我正在使用ASP.NET MVC2和Entity Framework。我将稍微简化一下情况;希望它会让它更清晰,而不是更令人困惑!
我有一个控制器动作来创建地址,而country是一个查找表(换句话说,Country和Address类之间存在一对多的关系)。让我们说清楚一点,Address类中的字段叫做Address.Land。而且,出于下拉列表的目的,我将获得Country.CountryID和Country.Name。
我知道Model vs. Input validation。所以,如果我调用下拉字段 formLand - 我可以使它工作。但是如果我调用字段 Land (即匹配Address类中的变量) - 我收到以下错误:
“从类型转换参数 'System.String'键入'App.Country' 失败因为没有类型转换器可以 在这些类型之间转换。“
好的,这很有道理。字符串(CountryID)来自表单,绑定器不知道如何将其转换为Country类型。所以,我写了转换器:
namespace App {
public partial class Country {
public static explicit operator Country(string countryID) {
AppEntities context = new AppEntities();
Country country = (Country) context.GetObjectByKey(
new EntityKey("AppEntities.Countries", "CountryID", countryID));
return country;
}
}
}
FWIW,我尝试了显性和隐性。我从控制器测试了它 - Country c = (Country)"fr"
- 它运行正常。但是,在发布视图时,它永远不会被调用。我在模型中得到了相同的“无类型转换器”错误。
如何提示如何 类型转换器的模型绑定器? 感谢
答案 0 :(得分:2)
类型转换器与显式或隐式转换不同,它是一个在不同类型之间转换值的对象。
我认为您需要创建一个继承自TypeConverter
的类,该类在Country
和其他类型之间进行转换,并将TypeConverterAttribute
应用于您的类以指定要使用的转换器:
using System.ComponentModel;
public class CountryConverter : TypeConverter
{
// override CanConvertTo, CanConvertFrom, ConvertTo and ConvertFrom
// (not sure about other methods...)
}
[TypeConverter(typeof(CountryConverter))]
public partial class Country
{
...
}