Расширение System.String для пользовательской реализации EditTemplate (Ajax) - PullRequest
0 голосов
/ 29 сентября 2011

Это следующее.

Обычно, когда у меня есть город, я использую некоторый javascript для автозаполнения городов в качестве типа пользователя.

Теперь я хочу сделать это автоматически, используя шаблон редактирования. Так что я бы изменил:

 Public String City{get;set;}

до

 Public City City {get;set;}

Но я не могу унаследовать класс System.String, поэтому я хотел бы найти лучшую альтернативу для этого. Я бы создал новый вид класса City и добавил бы javascript в свой EditorTemplate, так что мне больше никогда бы не пришлось его добавлять :).

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Я не стал бы беспокоиться о новом типе, но использовал бы метаданные на ваших моделях, чтобы изменить редактор. Атрибут [UIHint("MyCityTemplate")] в свойстве заставит EditorFor и DisplayFor использовать MyCityTemplate, а не шаблон редактора по умолчанию для строки.

2 голосов
/ 29 сентября 2011

Я предполагаю, что вам нужно использовать метод 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...