2008-12-12 50 views
14

因此,我完全購買了ASP.NET,可測試性,SoC,HTML控制等基本功能......真是太棒了。然而,對於這個新手來說,我有一個巨大的掛斷標記。我知道它來自我對經典ASP的仇恨,我不禁感到自己已經進入了黃昏時區I see this如何在我的ASP.Net MVC標記中克服我對<% %>的恐懼?

我不知道另一種方法是什麼(我可以使用服務器控件,數據綁定等..?)

+0

圖中的代碼看起來或多或少有組織雖然。 – liggett78 2008-12-12 17:24:43

回答

11

有很多事情可以做,以幫助清理的標記,但我同意它可以得到一點點標籤soupy。

輸出數據

舉例來說,這是我取得了令延期的RSS-spitter-外:)

public static string RSSRepeater<T>(this HtmlHelper html, IEnumerable<T> rss) where T : IRSSable 
    { 
     StringBuilder result = new StringBuilder(); 

     if (rss.Count() > 0) 
     { 
      foreach (IRSSable item in rss) 
      { 
       result.Append("<item>").Append(item.GetRSSItem().InnerXml).Append("</item>"); 
      } 
     } 

     return result.ToString(); 
    } 

所以在我所有的前端是<%=Html.RSSRepeater(mydata)%>,這是更好。

+1

Html幫助器是一種很好的方式,但它有些情況下,在連接代碼而不是視圖中使用HTML會更糟糕。 – 2008-12-12 17:28:53

+0

我同意某種方式,尤其是當您處於前端開發人員需要能夠輕鬆更改標記的環境中時。 – qui 2008-12-12 17:30:18

+0

這是rss,但:標記是非常嚴格和明確的。 – 2008-12-12 17:48:41

4

Avoiding tag soup閱讀可能會對您有幫助。通常你不能使用服務器控件(有些可能會工作),沒有回傳或視圖狀態。我不認爲你可以使用數據綁定(可能有例外,我不確定ASP.NET MVC如何處理視圖中的服務器控件) - 「數據綁定」最簡單的方法是傳遞一個列表或數組的數據放入視圖中,並使用foreach從其中構建HTML。

7

1)助手降低HTML噪聲
2)的局部視圖以破碎較大的頁/重用視圖代碼
3)嘗試不同的渲染引擎,如Sparkline
4)重構如果您的視圖包括太多if聲明。

1

移動一些(不是所有的,只在有意義的情況下)顯示邏輯(如你的日期)到你的模型中。例如,在您的示例中,您可以添加處理.ToShortDateString()調用的Task.DisplayDate字符串屬性。然後,如果它發生了變化,則將其全部更改爲一個地方,並縮短視圖中的代碼。

HTML助手很好,有時候。我不太喜歡在串聯字符串中使用我的HTML或者在某個類中使用StringBuilder,但是如果您在處理大量不同的數據集時做了很多工作,那麼它們並不是那麼糟糕。

我也會改變你的C#代碼格式首選項,使括號在同一行。這減少了混亂。不幸的是,你不能在代碼編輯器和HTML編輯器之間爲此設置單獨的設置,所以你必須在代碼中習慣它。這不是世界上最糟糕的事情。

其他人說的也有幫助:使用部分視圖和強類型。

0

如果在格式化後按ctrl + z,只是撤消格式化而不是打字。

我覺得這有助於保持第一支架在同一行的if語句

0

如果你談論的是從呈現控件的HTML,恐怕不會得到任何好轉,只是因爲你已經有了一個很好的基於標準的包裝器,可以在你的MVC中查看。如果沒有適應性控制,輸出仍然是大約1995年糟糕的嵌套表格代碼。

謝謝,微軟!

0

使用服務器端註釋<%-- comment --%>來分隔塊並提高可讀性。使用額外的行間距來分隔塊(因爲某種原因,這似乎是因爲我的行間距而消失)。

 <%-- Go through each testimonial --%> 
     <% foreach (var testimonial in ViewData.Model.Testimonials) { %> 

     <div class="testimonialFrame"> 
      <div class="testimonialHeader"><%= testimonial.summaryText %></div> 


      <%-- Show video if available --%> 
      <% if (string.IsNullOrEmpty(testimonial.Video.FullURL) == false) { %> 

      <div style="padding-top:12px"> 
       <% Html.RenderAction("YouTubeControl", "Application", new { youTubeId = testimonial.Video.FullURL }); %> 
      </div> 

      <% } %> 

      <div class="roundedBox" style="margin-top:15px"> 
       <div id="txtTestimonialText" class="testimonialText paddedBox"><%= testimonial.TestimonialText %></div> 
      </div> 

      <div class="testimonialFooter"><%= testimonial.name %></div> 
     </div> 

     <% } %> 
0

非常偶爾使用輔助方法(我不是在談論擴展的輔助方法)在使用HTML對象模型視圖本身編寫HTML代碼。我不會推薦這個,除非你有一些奇怪的邏輯,你不能在視圖中輕鬆書寫。只要.aspx.cs中的代碼是VIEW代碼,那麼它很好。

在您查看的.aspx文件:

<%-- render section --%> 
<% RenderTextSection(section); %> 

在您看來的「代碼隱藏」您使用HtmlGenericControl創建HTML,然後下面一行寫出來:

htmlControl.RenderControl(new HtmlTextWriter(Response.Output)); 

我的完整的方法:

protected void RenderTextSection(ProductSectionInfo item) 

    { 
     HtmlGenericControl sectionTextDiv = new HtmlGenericControl("div"); 

     bool previousHasBulletPoint = false; 
     System.Web.UI.HtmlControls.HtmlControl currentContainer = sectionTextDiv; 

     foreach (var txt in item.DescriptionItems) 
     { 
      if (!previousHasBulletPoint && txt.bp) 
      { 
       // start bulleted section 
       currentContainer = new HtmlGenericControl("UL"); 
       sectionTextDiv.Controls.Add(currentContainer); 
      } 
      else if (previousHasBulletPoint && !txt.bp) 
      { 
       // exit bulleted section 
       currentContainer = sectionTextDiv; 
      } 

      if (txt.bp) 
      { 
       currentContainer.Controls.Add(new HtmlGenericControl("LI") 
       { 
        InnerHtml = txt.t 
       }); 
      } 
      else 
      { 
       currentContainer.Controls.Add(new HtmlGenericControl() 
       { 
        InnerHtml = txt.t 
       }); 
      } 

      previousHasBulletPoint = txt.bp; 
     } 

     sectionTextDiv.RenderControl(new HtmlTextWriter(Response.Output)); 
    } 
0

我建議看一下MonoRails使用的Velocity模板引擎。 ASP.NET MVC在MonoRails格式上非常貼近自己,所以使用Velocity模板非常簡單。

Click here to learn more

1

我喜歡爲我的「<%%>」標籤添加語法高亮,與背景顏色非常相似。我爲我的「<%%>」標籤使用了黑色背景和銀色(手頭沒有特定顏色)顏色。在這裏加上其他建議應該讓你的代碼更具可讀性。當然,你總是可以嘗試另一個視圖引擎(這是MVC的美麗!)

0

現在好了,你可以嘗試Razor (在ASP.NET MVC 3)

我只是希望「@」不會嚇到你太:P

相關問題