Asp.net mvc 3 视图中具有HTML属性的String.Format()

Asp.net mvc 3 视图中具有HTML属性的String.Format(),asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我有一个带有一些继承的模型,但问题是,我想根据它的类型应用不同的HTML属性。所以我的想法是创建一个属性,我将其称为DisplayString,它用作String.Format的第一个参数显示字符串用于允许我执行以下操作: 课程: public class Reaction { public string ReactionString { get; set; } public string DisplayString { get; set; } public React

我有一个带有一些继承的模型,但问题是,我想根据它的类型应用不同的HTML属性。所以我的想法是创建一个属性,我将其称为
DisplayString
,它用作
String.Format
的第一个参数<代码>显示字符串用于允许我执行以下操作:

课程:

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.DisplayString,“”+Model.ReactionString+””;
所以基本上每个子类都有一个我想要显示的字符串,但是我有不同的文本和标记。当然,这样做只会导致强标记呈现为文本。那么我有什么选择呢?请随意提出任何需要澄清的问题,希望我的问题能正确地表达出来。谢谢


编辑:


所以我将它包装在
Html.Raw()
中,这就成功了,尽管我确信这样做有一些不好的地方,我可能应该对每一部分进行编码,然后添加标记,然后添加Raw,或者其他什么,但出于我的目的,它是有效的。

我会为每个具体类创建一个显示模板,MVC将非常聪明地选择正确的一个

例如,当您调用
@Html.DisplayFor(model=>model.Reaction)
时,其中
Reaction
被声明为基类,MVC将计算出它是什么类型,然后查找与该类型匹配的模板,如果找不到,它将查找该基类的模板,最后返回到默认模板。我在申请中经常这样做

听起来您还应该将
反应
类抽象化,并保护ctor

@model Reaction

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