2012-04-01 24 views
2

おそらく、これは別の場所で解決されていますが、検索するキーワードが見つかりません。ASP.NET MVC Razorコンテンツプレースホルダー

Razorビューエンジンを搭載したASP.NET MVCでは、htmlのさまざまな部分で、同じif文を何度も繰り返して表示するビューがあります。

<div>@ph1</div> 
<div>@ph3</div> 
<div>@ph2</div> 

@if(true) 
{ 
    ph1 = "<div>adfad<div>" 
    ph2 = "dsfaadfad" 
    ph3 = Model.Value 
} 

これは一種のです:もしシングルとのであれば、これらの各スポットを救うプレースホルダの値を設定するにだ場合は、これらのすべてを統合する方法があります場合、私はそうのように、思ったんだけど愚かな例が、私はそれが私が意味するもののポイントを作ると思う。

+0

回答を回答として投稿するのに十分な担当者がいるはずです。あなたはそうするべきです。 –

+0

私は100が必要です。 – quitstalin

+0

答えとして投稿しようとすると、どのようなメッセージが表示されますか?新しい投稿があった場合にEメールを受信するhttp://stackoverflow.com/privilegesを参照してください。 –

答えて

1
@{ 
    MvcHtmlString ph1 = new MvcHtmlString(""); 
    MvcHtmlString ph2 = new MvcHtmlString(""); 
    if (true) 
    { 
     ph1 = new MvcHtmlString("<div>" + Model.Value + "<div>"); 
     ph2 = new MvcHtmlString("<div>fsgfdgdfg<div>"); 
    } 
} 

@ph1 
@ph2 

再び、愚かな使い方ですが、それがポイントになります。

答えの1つとして示唆されたように、私が持っているものにうってつけのものは、ヘルパーを割り当てることです。これにより、多くの連結をせずに複数のステートメントを割り当てるのが容易になります。

@helper helper() 
{ 
    <span>@Model.Value</span> 
    <div>dsfadsfasdfdfa</div> 
} 

@{ 
    MvcHtmlString ph1 = new MvcHtmlString(""); 
    MvcHtmlString ph2 = new MvcHtmlString(""); 
    if (true) 
    { 
     ph1 = new MvcHtmlString("<div>" + Model.Value + "<div>"); 
     ph2 = new MvcHtmlString(helper().ToHtmlString()); 
    } 
} 

@ph1 
@ph2 

誰かが優れたアイデアを持っていれば、私はまだ興味があります。

0

ビューを使用することができます。より良いオプションは、部分的なビューを使用するか、またはtemplateのために表示することです。

モデル/ [制御]

public class SomeViewModel() 
{ 
    //[UIHint("PhoneNumber")] 
    //public string ph1 { get; set; } 
    //[UIHint("PhoneNumber")] 
    //public string ph1 { get; set; } 
    //[UIHint("PhoneNumber")] 
    //public string ph1 { get; set; } 

    //if these all represent phone numbers, it would be ideal to 
    [UIHint("PhoneNumbers")] 
    IEnumerable<string> PhoneNumbers { get; set; } 
} 

ビュー/ [コントローラ]

@model SomeViewModel 

@Html.DisplayFor(m => m.PhoneNumbers); 

ビュー/共有/ DisplayTemplates/PhoneNumbers.cshtml

@model IENumerable<string> 

@foreach (string phoneNumber in Model) 
{ 
    <div>@phoneNumber</div> 
} 
+0

これは問題を解決しません。私は個人的にDisplayForを使用しません。なぜなら、HTMLを使ってUIを設定し、データサービス。 – quitstalin