2010-05-14 12 views
5

ASP.NET MVC'ye yükseltiyorum ve görünümde iletileri nasıl çıkış yaptığımı görüyorum. Böyle bir şey yapmanın en iyi yolu nedir? Yardımcılar? Kontroller? Ya da olduğu gibi?ASP.NET MVC'deki koşullu çıktı için en iyi yöntem?

<% if (ViewData.ContainsKey("message") && !string.IsNullOrEmpty(ViewData["message"].ToString())) { %> 
    <div class="notice"> 
     <%= ViewData["message"] %> 
    </div> 
<% } %> 

cevap

5

Ben bir html yardımcı kullanırsınız:

public static class HtmlExtensions 
{ 
    public static string GetMessage(this HtmlHelper htmlHelper) 
    { 
     var message = htmlHelper.ViewData["message"] as string; 
     if (string.IsNullOrEmpty(message)) 
     { 
      return string.Empty; 
     } 
     var builder = new TagBuilder("div"); 
     builder.AddCssClass("notice"); 
     builder.SetInnerText(message); 
     return builder.ToString(); 
    } 
} 

ve görünümde:

<%= Html.GetMessage() %> 

Açıklama: Eğer kullanmaya karar verirseniz kodluyor mesajın değerini html unutma şeklini kodla.

+0

Darin, Bu yaklaşımı seviyorum, her zaman <% = Html.GetMessage()%> öğesini varsayılan olarak herhangi bir görünüme eklemek ve 'unutmak' için çok 'kolay' olurdu. Daha sonra denetleyici mantığı, ViewData ["mesaj"] 'a herhangi bir şey ekleyip eklemeyeceğine karar verebilir. şimdi, sadece viewdata ('message' dışında) için anahtarı kolayca tanımlamak için bir yol varsa, o zaman bu güzel bir kendi kendine yeten genişletilebilir küçük yardımcı olacaktır :) edit - tabii ki ek bir Bu özniteliği tanımlamak için yardımcıya parametre eklenebilir - veya daha iyi bir yol var mı? –

+0

Bu harika görünüyor, örnek için teşekkürler. – RyanW

1

Elinizdeki gibi bir durumun en basit yaklaşım olduğunu düşünüyorum. Bir kontrol bunun için çok "ağır" hisseder. Belki kendini tekrar eden bir şey bulursanız yardımcı olur.

İlgili konular