2009-09-15 52 views
0

在給定的頁面上,讓我們說要顯示一個窗口,我可能需要一些JavaScript初始化,一些DIV具有特定的ID,並且它們都需要相互連接。 JavaScript可能需要了解DIV的ID,DIV可能需要以某種方式嵌套,等等。很明顯,我不想在每個使用該代碼的頁面上擔心這一點。這會使其容易出錯,而不是乾燥。ASP.NET MVC分組/重用查看功能

使用WebForms我會通過編寫自定義控件來解決此問題。你們在項目中如何做到這一點?你使用擴展方法吐出字符串,也許用戶控件?建議的方式是什麼?

謝謝。

  1. 在頭內容區域,我需要一些jQuery代碼,設置了一些功能
  2. 在一個內容區域:

    編輯:採用主頁面時

    下面是一個例子我會放一些HTML來顯示窗口的一部分

  3. 在不同的內容區域中,我會放置顯示在窗口中的實際HTML。

所以,所有這3件將需要3個不同的代碼塊,但將邏輯鏈接。

編輯2

代碼示例(使用主頁)

<asp:Content ContentPlaceHolderID="HeaderContent" runat="server"> 
    <script type="text/javascript"> 
    $(document).ready(function() { DoSomething('div1', 'div2'); }); 
    </script> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="TopContent" runat="server"> 
    <div id='div1'> ... </div> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="BottomContent" runat="server"> 
    <div id='div2'> ... </div> 
</asp:Content> 

DIV1和DIV2耦合使用JavaScript函數調用。如果我犯了一個錯誤,給DIV一個不同的ID,代碼就會中斷。這是一個證明這一點的簡單例子。例如,當耦合依賴於具有特定結構的div1時,它會變得更加複雜。

+0

我回滾了編輯;對不起,但它完全改變了原來的問題。也許我沒有正確解釋...... – pbz 2009-09-15 01:22:35

回答

2

你能利用Site.Master達到這個目的嗎,或者至少是你自己創造的另一個主人?然後,您的所有視圖都可以引用此主人並獲得初始化的JavaScript和佈局元素的好處。

對我而言,如果內容在本質上是靜態的,這是有意義的。如果沒有,我會使用自定義的Html.Init幫助器方法。

我預想類似如下:

global.js

function doSomething() 
{ 
} 

//more code here 

母版頁

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title> 
     <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> 
    </title> 
    <link rel="Stylesheet" href="~/Content/styles.css" /> 
    <script type="text/javascript" src="global.js"></script> 
</head> 
<body> 
    <div id="customContent"> 
    </div> 
    <div id="content"> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
    </div>  
</body> 
</html> 
+0

我使用的是母版頁,所以不是真的,因爲零碎是分開的。 JS代碼將放在標題部分,而html部分放在某個位置。 – pbz 2009-09-15 01:24:23

+0

@pgz:我爲此答案添加了一個示例。你不需要朝這個方向前進,但是如果你這樣做,這是相當直接的。請注意包含在主文件頂部腳本標記中的global.js文件。 – 2009-09-15 01:33:37

+0

正確,但doSomething方法需要接受特定於頁面的參數(如某些DIV的ID)。如果我調用doSomething('div1','div2'),並且我錯誤地將不同的ID分配給了div,那麼代碼將會破壞。我正在尋找的是防止這些類型錯誤的方法。謝謝。 – pbz 2009-09-15 01:36:23

1

你可以得到CustomControlls最接近的是局部模板。它們不像CustomControlls那樣強大,因爲它們沒有事件處理(顯然),但是分離常見html的好方法。

+0

partials的問題是它們(partials/user controls)沒有內容佔位符,所以我不能構建一個寫一些html「header」和「footer」的部分,而讓我自定義中間部分。 HTML擴展有相同的問題。我需要兩個部分或兩個擴展方法,一個用於渲染頁眉,另一個用於渲染頁腳,如果我需要更多的佔位符,則需要更多。謝謝。 – pbz 2009-09-15 15:05:32