为自定义EditTemplate(Ajax)实现扩展System.String

时间:2011-09-29 08:14:40

标签: c# .net asp.net-mvc vb.net asp.net-mvc-3

以下是这个。

通常情况下,当我有一个城市时,我会使用一些javascript来自动填充城市作为用户类型。

现在我希望它使用edittemplate自动进行。所以我会改变:

 Public String City{get;set;}

 Public City City {get;set;}

但我不能继承System.String类,所以我想要做到这一点的最佳选择。 我会创建一个City类的新视图,并在我的EditorTemplate中添加javascript,所以我不再需要添加它:)。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我认为你想要的是使用Html.EditorFor<City>()方法及其兄弟,这对于简单类型并不适用。您可以将City类隐式地转换为System.String和来自string,并且它应该与实际的public class City { private readonly string city; public City(string city) { if (city == null) throw new ArgumentNullException("city"); this.city = city; } public override bool Equals(object obj) { City other = obj as City; return (other != null) && this.city.Equals(other.city); } public override int GetHashCode() { return this.city.GetHashCode(); } public override string ToString() { return this.city; } public static implicit operator string(City city) { return city.city; } public static implicit operator City(string city) { return new City(city); } } 无法区分:

System.String

现在可以将此类传递给期望string city = new City("Washington"); City city = "Washington"; 的方法,反之亦然:

{{1}}

答案 1 :(得分:2)

我不打算使用新类型,但在模型上使用元数据来更改编辑器。属性上的[UIHint("MyCityTemplate")]属性将使EditorFor和DisplayFor使用MyCityTemplate而不是字符串的默认编辑器模板。