Атрибут ASP.NET MVC

Мне нужно создать атрибут, который должен привести к тому, что текстовая область станет текстовым редактором ( TinyMCE/ CKEditor). Как бы я этого достиг?

Например, моя модель:

public class MyModel
{
    [RichText]
    public string Detail {get;set;}
}

Когда он рендерится, он должен показывать область расширенного текста.

2 ответа

Решение

Вы можете унаследовать DataTypeAttribute:

public class RichTextAttribute : DataTypeAttribute
{
     public RichTextAttribute() : base("RichText") {}
}

Вы даже можете добавить проверку в этот атрибут, если, например, вы хотите запретить определенные теги HTML, чтобы избежать атак XSS или чего-либо еще.

Как указано в другом ответе, вы просто добавляете шаблон редактора для RichText.cshtml или RichText.ascx в папку View\Shared\EditorTemplates и в представлении, где вы показываете свойство, используйте:

Html.EditorFor(m => m.Detail)

В шаблоне вашего редактора вы бы добавили свой код для создания TextArea (или, тем не менее, вы вызываете TinyMCE), а затем вы можете зарегистрировать некоторый скрипт на главной странице, чтобы прикрепить TinyMCE к любому тегу, который выводит ваш шаблон редактора.

Предполагая, что вы используете как минимум MVC2, используйте [UIHint("RichText")] чтобы указать, что вы хотите, чтобы это было поле RichText, затем создайте EditorTemplate с именем RichText.cshtml (или.aspx, или какую бы технологию просмотра вы не использовали) и определите HTML-код, который вы хотите использовать (вам нужно создать html для используйте любой форматированный текстовый редактор, который вы используете).

Затем используйте EditorFor() на ваш взгляд, и он должен работать.

Вы также можете использовать [DataType(DataType.Html)] а затем создайте Html.cshtml EditorTemplate.

Другие вопросы по тегам