0

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

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

它包含一些功能。其中一个调用的函数populateHidden()用于为hiddenFieldI 在前端 (.aspx) 上定义的值分配一个值,如下所示:

在 External.js 中

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

在 .aspx 中

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

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

Dim str = Hidden2.value

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

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

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

  3. 我需要Hidden2.value在服务器端的原因是将其存储在我的sql_database. Hidden2.value从前端获得的任何建议、建议或解决方案将不胜感激。

4

1 回答 1

1

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

首先,您需要一个ScriptManager将 EnablePageMethods 属性设置为 true 的声明:

 <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
于 2013-02-13T17:53:27.757 回答