一页上有多个ASP.Net控件

时间:2010-05-27 23:22:00

标签: asp.net javascript user-controls

我们已经为ASP.Net创建了一个用户控件。在任何时候,用户的个人资料页面可以包含这些控件的一个和无限之间。 Control.ascx文件包含相当多的javascript。当控件由.Net呈现为HTML时,您会注意到它为每个控件打印了javascript。

这是预期的。我想减少服务器输出的HTML数量,以增加页面加载时间。通常,您可以将javascript移动到外部文件,然后您只需要一个额外的HTTP请求,该请求将用于所有控件。

但是在javascript中我们有类似

document.getElementById('<%= txtTextBox.ClientID %>');
的实例呢? javascript如何知道哪个用户控件可以使用?有没有人做过这样的事情,或是解决方案盯着我?

4 个答案:

答案 0 :(得分:2)

编写带有ID的函数,将它们放在mysite.js中并像这样引用文件:

<script type="text/javascript" src="/mysite.js"></script>

然后当您在控件中进行调用时,请执行以下操作:

<div onClick="DoMyFunctionThatIWant('<%= txtTextBox.ClientID %>')">...</div>

然后你在js中的函数是这样的:

function DoMyFunctionThatIWant(domId)
{
   var obj = document.getElementById(domId);
}

答案 1 :(得分:0)

你有能力使用jQuery吗? css选择器功能对于这些类型的场景非常强大。例如:

<div class="action" id="1">Node 1</div>
<div class="action" id="2">Node 2</div>
<div class="action" id="3">Node 3</div>
<div class="action" id="4">Node 4</div>
<div class="action" id="5">Node 5</div>

然后,您将拥有一个JavaScript函数并将其绑定到符合选择条件的每个元素。它可能看起来像:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
    $('.action').click(function() {
        var $t = $(this);       //---here is your contextual node
        alert($t.attr('id'));   //---this alerts the id value of your node
    });
</script>

答案 2 :(得分:0)

以下是解决方案:

  • 创建外部javascript文件并将所有代码复制到其中。
  • 对于需要由javascript引用的usercontrol中的每个元素,创建一个新的Object。
  • 返回usercontrol的ascx文件,获取每个usercontrol的id并使其成为Object的成员,并使该成员的值等于Object引用的usercontrol中元素的id。执行此操作。
  • 现在,在每个函数中,使用控件的ID作为键,通过从Object中获取此ID来查找所需的实际元素。

我的实际全面解决方案有点不同。每个用户控件都包含一个telerik radgrid。 radgrid的客户端事件处理程序的格式为

radGrid_eventOccurred(sender, args) {
,其中sender是网格对象。

因此我没有使用usercontrols ID作为代码中的键,而是使用了网格。

每当我点击网格中的一行时,我都需要更新usercontrol中的文本框。我现在可以这样做:

function radGrid_rowClick(sender, args) {
    var text = /*Get the text of the clicked row*/;

    var textBox = textBoxesObject[sender];
    textBox.set_value(text);
}

答案 3 :(得分:0)

编写一个microsoft ajax客户端组件。

这需要做很多事情:

  • 在JavaScript文件中编写组件类。
  • 通过在类后面的代码上实现IScriptControl来注册此脚本文件。
  • 通过为类后面的代码实现GetScriptDescriptors来创建客户端组件的实例。
  • 将clientID作为参数添加到描述符中,因此客户端组件类(以js编写)知道客户端ID。

组件类可以执行您想要的所有操作,因为它知道您的用户控件的所有clientIds。这适用于同一用户控件的多个实例。作为一个陷阱,实施起来有些麻烦。但它很干净。