使用ClientScriptIncludeRegister获取隐藏的字段值

时间:2013-02-13 14:32:38

标签: asp.net vb.net visual-studio-2010 .net-4.0

我正在使用ASP.NET / VB实现Web应用程序。前端(.aspx)执行外部.js文件:

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

它包含一些功能。其中一个名为populateHidden()的函数用于为前端定义的hiddenField(.aspx)赋值,如下所示:

在External.js

document.getElementByID('Hidden2').value = "dsadsadas";

在.aspx

<input id="Hidden2" type ="hidden" runat="server" />

我一直在尝试做的是获取分配给Hidden2的值,并使用以下命令将其传递给服务器端(.aspx.vb):

Dim str = Hidden2.value

但是,由于服务器端代码首先执行,str将为空,除非postback以某种方式完成,无论是使用Button还是Timer重新加载前端,然后strdsadsadas。我不打算重新加载页面或初始化postback。我试了window.onload = populateHidden()没有运气。这种情况让我绝望,因为我尝试了许多事情,确保在遇到ClientScriptManager.RegisterClientScriptInclude Method 之前我不使用postbacks or reloads。我无法绕过如何使用这样的例子来解决我的情况。

  1. 我们的想法是从服务器端调用或执行External.js(因为它首先执行),然后在前端填充Hidden2,返回服务器端并检索Hidden2.value

  2. 然而,前面提到的链接中的示例,服务器端代码是在前端编写的,但我想在服务器端编写它(.aspx.vb)。

    < / LI>
  3. 我在服务器端需要Hidden2.value的原因是将其存储在我的sql_database中。任何从前端获得Hidden2.value的建议,建议或解决方案都会非常感激。

1 个答案:

答案 0 :(得分:1)

以下解决方案仅使用ASP.Net Ajax Engine。在PageLoad事件中,正在注册对populateHidden()函数的调用。在代码隐藏中,添加了一个标有WebMethod属性的方法,允许它由Ajax请求调用(没有回发)。因此,当单击该按钮时,将调用javascript函数sendHiddenValueToServer(),向页面方法发出Ajax请求,并将隐藏字段值作为参数传递。

首先,您需要在EnablePageMethods属性设置为true的情况下声明ScriptManager

 <asp:ScriptManager runat="server" EnablePageMethods="true" />

我使用以下标记测试:

<html>
<head runat="server">
    <title></title>
    <script src="External.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager runat="server" EnablePageMethods="true" />
    <div>
        <asp:HiddenField ID="Hidden2" runat="server" ClientIDMode="Static" />
        <button id="button1" onclick="sendHiddenValueToServer();">
        Send Value to Server</button>
    </div>
    </form>
 </body>
</html>

在Javascript文件中:

function populateHidden() {
    document.getElementById('Hidden2').value = "dsadsadas";
}

function sendHiddenValueToServer() {
    PageMethods.ReceiveHiddenValue(
            document.getElementById('Hidden2').value,
            function () { alert("success!") },
            function () { alert("error!") });
}

在代码隐藏中:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        ScriptManager.RegisterStartupScript(Me, Me.GetType(), "register", "populateHidden();", True)
    End If
End Sub

<System.Web.Services.WebMethod()>
Public Shared Sub ReceiveHiddenValue(ByVal value As String)        
    Dim str As String = value
    ' Save Value to database
End Sub