在给定的页面上,让我们说要显示一个窗口,我可能需要一些JavaScript初始化,一些具有特定ID的DIV,并且它们都需要相互链接。 JavaScript可能需要知道DIV的ID,DIV可能需要以某种方式嵌套,依此类推。显然,我不想在我使用该代码的每一页上担心这一点。这会使它容易出错,而不是DRY。
使用WebForms,我会通过编写自定义控件来解决这个问题。你们是如何在你的项目中做到这一点的?您是否正在使用扩展方法吐出字符串,也许是用户控件?推荐的方式是什么?
感谢。
修改:
以下是使用母版页时的示例:
因此,所有这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 :(得分:2)
您是否可以为此目的利用Site.Master,或者至少是您自己创作的另一位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>
答案 1 :(得分:1)
您最接近自定义控件的是Partials。它们没有CustomControlls那么强大,因为它们没有事件处理(显然),但它是分离常见html的好方法。