String.Format () с атрибутами HTML в представлении - PullRequest
1 голос
/ 23 февраля 2012

У меня есть модель с некоторым наследованием, но вот в чем дело, я хочу применить различные атрибуты HTML в зависимости от того, какой это тип. Поэтому я подумал о создании свойства, я назову его DisplayString, которое используется в качестве первого аргумента для String.Format. DisplayString используется, чтобы позволить мне сделать что-то вроде этого:

Классы:

public class Reaction
{
    public string ReactionString { get; set; }
    public string DisplayString { get; set; }

    public Reaction(string reactionString)
    {
        ReactionString = reactionString;
        DisplayString = "It was {0}!"
    }

    public Reaction(string reactionString, string displayString)
    {
        ReactionString = reactionString;
        DisplayString = displayString;
    }

}

public class GoodReaction : Reaction
{
    public GoodReaction()
    {
        base("awesome");
    }
}

public class BadReaction : Reaction
{
    public GoodReaction()
    {
        base("horrible");
    }
}

public class AverageReaction : Reaction
{
    public GoodReaction()
    {
        base("alright", "It kinda was {0}...");
    }
}

Вид:

@model Reaction

@String.Format(Model.DisplayString, "<strong>" + Model.ReactionString + "</strong>");

Так что в основном у каждого подкласса есть строка, которую я хочу отобразить, но у меня есть разный текст И разная разметка. Конечно, если сделать это таким образом, то результат получится с сильными тегами, представленными в виде текста. Так какие у меня варианты? Не стесняйтесь задавать любые вопросы, необходимые для прояснения, надеюсь, я правильно изложил свой вопрос. Спасибо!


EDIT:

Так что я завернул его в Html.Raw(), и это помогло, хотя я уверен, что в этом есть что-то плохое, и мне, вероятно, следует кодировать каждый фрагмент, затем добавлять теги, затем raw или что-то еще, но для моего Цели это работает.

1 Ответ

0 голосов
/ 23 февраля 2012

Я бы создал шаблон отображения для каждого конкретного класса, и MVC будет достаточно умен, чтобы выбрать правильный.

Например, когда вы звоните @Html.DisplayFor(model => model.Reaction), где Reactionобъявлен как базовый класс, MVC определит, какой это тип, затем найдет шаблон, соответствующий этому типу, если он его не найдет, он найдет шаблон базового типа, и, наконец, вернется к стандартномушаблон.Я часто делаю это в своем приложении.

Звучит так, как будто вы также должны сделать Reaction class abstract , а у ctor's protected .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...