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