我正在使用ASP.NET MVC2和Entity Framework。我會稍微簡化一下情況;希望它會使它更清晰,不會更混亂!顯式轉換在默認模型綁定中不起作用
我有一個控制器操作來創建地址,國家是一個查找表(換句話說,國家和地址類之間有一對多的關係)。爲了清楚起見,Address類中的字段稱爲Address.Land。而且,出於下拉列表的目的,我得到了Country.CountryID和Country.Name。我想了解Model vs. Input validation。所以,如果我打電話給下拉字段formLand - 我可以讓它工作。但是,如果我叫場土地(即,匹配地址類變量) - 我收到以下錯誤:
"The parameter conversion from type 'System.String' to type 'App.Country' failed because no type converter can convert between these types."
OK,這是有道理的。一個字符串(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.02:綁定查看/編輯模型,而不是實體。 – 2010-03-08 21:27:06
我不會不同意 - 但我在這裏描述的下拉菜單的問題將完全相同 – Felix 2010-03-08 22:11:04
不是。您的視圖模型屬性將是一個「字符串」,而不是一個實體。綁定會起作用。然後您可以使用字符串上的查詢更新實體。 – 2010-03-09 02:31:57