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

Asp.net mvc ASP.NET MVC分组/重用视图功能,asp.net-mvc,Asp.net Mvc,在给定的页面上,比如说显示一个窗口,我可能需要一些JavaScript初始化,一些具有特定ID的div,所有这些都需要相互链接。JavaScript可能需要知道DIV的ID,DIV可能需要以某种方式嵌套,等等。显然,我不想在我使用代码的每一页上都担心这一点。这将使它容易出错,而且不干燥 使用WebForms,我可以通过编写自定义控件来解决这个问题。你们在项目中是如何做到这一点的?您是否正在使用扩展方法吐出字符串,可能是用户控件?推荐的方法是什么 谢谢 编辑: 以下是使用母版页时的示例: 在HEA

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

使用WebForms,我可以通过编写自定义控件来解决这个问题。你们在项目中是如何做到这一点的?您是否正在使用扩展方法吐出字符串,可能是用户控件?推荐的方法是什么

谢谢

编辑

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

  • 在HEAD-content区域,我需要一些jQuery代码来设置一些功能
  • 在一个内容区域中,我会放置一些显示窗口一部分所需的HTML
  • 在一个不同的内容区域,我会把实际的HTML显示在窗口中
  • 因此,所有这3个部分都需要3个不同的代码块,但逻辑上是链接的

    编辑2

    代码示例(使用母版页)

    
    $(document).ready(函数(){DoSomething('div1','div2');});
    ... 
    ... 
    

    div1和div2与JavaScript函数调用耦合。如果我犯了错误,给DIV一个不同的ID,代码就会中断。这是一个简单的例子,证明了这一点。例如,当耦合依赖于具有特定结构的div1时,它会变得更加复杂。

    您可以利用Site.Master实现此目的,或者至少使用您自己创建的另一个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>
    

    您是否可以利用Site.Master实现此目的,或者至少使用您自己创建的另一个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>
    
    
    
    最接近CustomControlls的是Partials。它们没有CustomControlls强大,因为它们没有事件处理功能(显然),但却是分离常见html的好方法。

    最接近CustomControlls的是片段。它们没有CustomControls强大,因为它们没有事件处理功能(显然),但却是分离常见html的好方法。

    我回滚了编辑;对不起,这完全改变了原来的问题。也许我解释得不好……我把编辑的内容放了回去;对不起,这完全改变了原来的问题。也许我没有正确解释…我使用的是母版页,所以不是真的,因为每一部分都是分开的。JS代码将放在标题部分,而html部分将放在某个位置。@pgz:我已经为这个答案添加了一个示例。你不必朝这个方向走,但如果你这样做的话,那就相当简单了。注意主文件顶部的script标记中包含的global.js文件。对,但是doSomething方法需要接受特定于页面的参数(如某些div的id)。如果我调用doSomething('div1','div2'),并且错误地为div分配了不同的ID,代码就会中断。我正在寻找的是一种防止此类错误的方法。谢谢。我很困惑,为什么doSomething不能获取元素ID?或者,您也可以为div使用类。与$(“div.window”).show()一样。是的,它可以采用元素ID。当我这样做时,比如doSomething('div1'),我将函数调用与块耦合起来。如果我错误地为DIV分配了一个不同的ID,那么代码将无法工作。实际上,我输入了两次'div1',因此可能会出错。有没有一种方法可以消除这种可能性,通过某种方式允许写doSomething字符串的.NET代码与写DIV的代码“通信”,以便只声明一次?这不是让它发挥作用的问题,而是最好(最干燥)的方法。谢谢。我用的是母版页,所以不是真的,因为每个部分都是分开的。JS代码将放在标题部分,而html部分将放在某个位置。@pgz:我已经为这个答案添加了一个示例。你不必朝这个方向走,但如果你这样做的话,那就相当简单了。注意主文件顶部的script标记中包含的global.js文件。对,但是doSomething方法需要接受特定于页面的参数(如某些div的id)。如果我调用doSomething('div1','div2'),并且错误地为div分配了不同的ID,代码就会中断。我正在寻找的是一种防止此类错误的方法。谢谢。我很困惑,为什么doSomething不能获取元素ID?或者,您也可以为div使用类。与$(“div.window”).show()一样。是的,它可以采用元素ID。当我这样做时,比如doSomething('div1'),我将函数调用与块耦合起来。如果我错误地为DIV分配了一个不同的ID,那么代码将无法工作。实际上,我输入了两次'div1',因此可能会出错。有没有办法通过某种方式允许写doSomething字符串的.NET代码与写DIV的代码“通信”来消除这种可能性