2009-09-15 54 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