代码之家  ›  专栏  ›  技术社区  ›  pbz

ASP.NET MVC分组/重用视图功能

  •  0
  • pbz  · 技术社区  · 15 年前

    在一个给定的页面上,比方说显示一个窗口,我可能需要一些JavaScript初始化,一些具有特定id的div,所有这些都需要相互链接。JavaScript可能需要知道DIV的ID,DIV可能需要以某种方式嵌套等等。显然我不想在我使用代码的每一页上都担心这个问题。这将使它容易出错,而且不干燥。

    使用WebForms,我可以通过编写自定义控件来解决这个问题。你们在项目中是怎么做到的?你是不是在使用扩展方法来抛出字符串,也许是用户控件?推荐的方法是什么?

    谢谢。

    编辑 :

    下面是使用母版页时的示例:

    1. 在HEAD内容区域,我需要一些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时,它会变得更加复杂。

    2 回复  |  直到 15 年前
        1
  •  2
  •   David Andres    15 年前

    你能利用Site.Master来达到这个目的吗,或者至少是你自己创造的另一个Master?然后,所有视图都可以引用此主视图,并获得初始化的JavaScript和布局元素的好处。

    对我来说,如果内容本质上是静态的,这是有意义的。如果没有,我将使用一个自定义的Html.Init帮助器方法。

    我设想如下:

    全球.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>
    
        2
  •  1
  •   Mathias F    15 年前

    最接近CustomControlls的是Partials。它们不像CustomControlls那么强大,因为它们没有事件处理(显然),但是是分离公共html的好方法。