我正在使用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
重新加载前端,然后str
将dsadsadas
。我不打算重新加载页面或初始化postback
。我试了window.onload = populateHidden()
没有运气。这种情况让我绝望,因为我尝试了许多事情,确保在遇到ClientScriptManager.RegisterClientScriptInclude Method 之前我不使用postbacks or reloads
。我无法绕过如何使用这样的例子来解决我的情况。
我们的想法是从服务器端调用或执行External.js
(因为它首先执行),然后在前端填充Hidden2
,返回服务器端并检索Hidden2.value
。
然而,前面提到的链接中的示例,服务器端代码是在前端编写的,但我想在服务器端编写它(.aspx.vb)。
< / LI>我在服务器端需要Hidden2.value
的原因是将其存储在我的sql_database
中。任何从前端获得Hidden2.value
的建议,建议或解决方案都会非常感激。
答案 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