2013-02-13 85 views
0

我正在使用ASP.NET/VB实现一个Web应用程序。它包含一些功能使用ClientScriptIncludeRegister获取隐藏字段值

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

:前端(的.aspx)执行外部.js文件作为。这些功能之一称为populateHidden()用于将值分配给我的前端所限定的hiddenField(的.aspx)如下:

在External.js

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

在的.aspx

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

我一直ŧ rying做的是使用来获取有关分配给Hidden2值,并将其传递给服务器端(.aspx.vb):

Dim str = Hidden2.value

然而,由于服务器端代码执行第一,str将是空的除非使用ButtonTimer来重新加载前端,否则postback会以某种方式完成,那么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将非常感激。

+0

您或者需要回发表单或通过ajax提交数据。 [实现客户端回调没有回传](http://msdn.microsoft.com/en-us/library/ms178208.aspx) – MikeSmithDev 2013-02-13 14:39:24

+0

@MikeSmithDev那么我会需要的是完全相反,运行客户端代码在服务器端与没有回传。 – HShbib 2013-02-13 15:48:45

+0

如果你不想回发,你需要的是AJAX。您不能在服务器上运行客户端代码....因为您在服务器上。您可以将客户端数据异步发布到服务器,而不会导致整页回发。 – MikeSmithDev 2013-02-13 15:51:29

回答

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 
+0

如果我想在普通的'.html'页面中使用标记而不是'.aspx'页面,该怎么办?你提供的解决方案工作?如果是的话,我该如何编辑它?在考虑asp.net服务器控件时,更改它们可能会导致问题? – HShbib 2013-02-14 15:05:05

+0

您可以完美地使用常规的'.html'页面,但您必须使用jQuery(或其他JS框架)来创建Ajax请求。 – MarcusVinicius 2013-02-14 16:08:19

+0

为了使事情更清楚,我有一个常规的.html页面,其中有一个html ,并且我调用External.js。反过来,External.js应该为Hidden2赋值,然后将其值传递给代码隐藏以便将其存储在数据库中。是去jQuery的方式吗?我不能做到这一点使用JavaScript?我遇到的问题是,因为它在纯html中不起作用。如果你能给我一些关键词来寻找和研究,我会非常感激。 – HShbib 2013-02-14 16:40:47