2012-02-22 25 views
1

私はモデルをいくつか継承していますが、ここではそのタイプに応じて異なるHTML属性を適用したいと考えています。だから私の考えは、プロパティを作成することでした、私はString.Formatの最初の引数として使用されるDisplayStringと呼ぶでしょう。ビュー内のHTML属性を持つ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()でそれを包み、それはトリックをした、私はそれをやっについて悪いものがあると確信しているが、私はおそらくタグを追加し、各部分をエンコードする必要があります、生の、または何か、私の目的のために動作します。

答えて

0

具体的なクラスごとにの表示テンプレートを作成すると、MVCは適切なものを選択するのに十分なほどスマートになります。

@Html.DisplayFor(model => model.Reaction)を呼び出すと、Reactionが基本クラスとして宣言されている場合、MVCはその型に一致するテンプレートを探し、見つからない場合はその型に一致するテンプレートを探します。基本型のテンプレートを作成し、最後にデフォルトのテンプレートにフォールバックします。私は私のアプリケーションでこれを多くしています。

はあなたにもReactionクラス抽象をしなければならないような音、そしてCTORの保護されています。

関連する問題