Asp.net mvc 3 视图中具有HTML属性的String.Format()
我有一个带有一些继承的模型,但问题是,我想根据它的类型应用不同的HTML属性。所以我的想法是创建一个属性,我将其称为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
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>");