我有一个模型,其中包含一些继承,但是这就是我想要根据它的类型应用不同的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>");
所以基本上每个子类都有一个我想要显示的字符串,但是我有不同的文本和不同的标记。当然这样做只会导致强大的标签呈现为文本。那么我的选择是什么?随意提出澄清所需的任何问题,希望我能正确地解决我的问题。谢谢!
修改
所以我把它包装在Html.Raw()
中就可以了,虽然我确定这样做有些不好我应该对每一块进行编码,然后添加标签,然后是原始的,或者其他东西,但是为了我的目的,它有效。
答案 0 :(得分:0)
我会为每个具体的类创建一个显示模板,而MVC将足够聪明,可以选择正确的类。
例如,当您调用@Html.DisplayFor(model => model.Reaction)
,其中Reaction
被声明为基类时,MVC将计算出它的类型,然后查找匹配该类型的模板,如果找不到它,它将寻找基本类型的模板,然后最终回退到默认模板。我在申请中做了很多。
听起来你也应该让Reaction
类抽象,而ctor的受保护。