2011-09-29 3 views
0

다음은 다음과 같습니다.사용자 정의 EditTemplate (Ajax) 구현을위한 System.String 확장

일반적으로 도시가있을 때 도시를 사용자 유형으로 자동 완성하기 위해 일부 자바 스크립트를 사용하고 있습니다.

이제 edittemplate을 사용하여 자동으로 만들고 싶습니다.

Public String City{get;set;} 

Public City City {get;set;} 

에하지만 난은 선택 System.String 클래스를 상속 할 수 없습니다, 그래서 내가 이렇게하는 가장 좋은 대안을 싶습니다 그래서 나는 변경합니다. City 클래스의 새 뷰를 만들고 내 EditorTemplate에 javascript를 추가하여 더 이상 추가하지 않아도됩니다. :)

미리 감사드립니다.

+1

질문에 당신을 따르고 있지 않습니다. –

답변

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"; 
+0

나는 이미 toString 메서드를 구현할 생각을했지만 더 좋은 방법은 없을 것이다. 감사합니다. – NicoJuicy

2

새로운 형식을 사용하지 않고 모델의 메타 데이터를 사용하여 편집기를 변경할 수 있습니다. 속성의 [UIHint("MyCityTemplate")] 속성은 EditorFor 및 DisplayFor를 사용하여 string의 기본 편집기 템플릿 대신 MyCityTemplate을 사용합니다.

+0

우수 답변, 서버가 내 질문을 포스팅합니다. 나는 그것을 인정해야한다, 그것은 공평하지 않다. 그러나 나는 다른 방식으로 (다른 DisplayTemplate을 바꾸는 최선의 방법은 ... 내가 가장 좋은 답을 주었다) 물어 보았다면 System.String을 구현하는 것이었다. . 죄송합니다. +1했습니다! – NicoJuicy

관련 문제