0

ASP.NET/VB を使用して Web アプリケーションを実装しています。フロントエンド (.aspx) は、外部.jsファイルを次のように実行します。

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

いくつかの機能が含まれています。呼び出されるこれらの関数の 1 つを使用して、次のようにフロントエンド (.aspx) で定義されpopulateHidden()た I に値を割り当てます。hiddenField

External.js 内

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

.aspx で

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

私がやろうとしているのは、割り当てられた値を取得し、Hidden2次を使用してサーバー側 (.aspx.vb) に渡すことです。

Dim str = Hidden2.value

ただし、サーバー側のコードが最初に実行strされるため、 は空になり、 aまたは aを使用してフロントエンドをリロードするかpostbackどうかに関係なく、 a が何らかの方法で実行されない限り、 . ページをリロードしたり、を初期化したりするつもりはありません。私は運が悪かった。ClientScriptManager.RegisterClientScriptInclude Methodに遭遇するまで使用しないように多くのことを試みたので、この状況は私を必死にしました。そのような例を使用して自分の状況を解決する方法を理解できませんでした。ButtonTimerstrdsadsadaspostbackwindow.onload = populateHidden()postbacks or reloads

  1. 念頭に置いているのはExternal.js、サーバー側から呼び出しまたは実行し (最初に実行されるため)、Hidden2フロントエンドに入力し、サーバー側に戻って取得することHidden2.valueです。

  2. ただし、前述のリンクの例では、サーバー側のコードはフロントエンドに記述されていますが、サーバー側 (.aspx.vb) に記述したいと考えています。

  3. Hidden2.valueサーバー側で必要な理由は、 sql_database. Hidden2.valueフロントエンドから得られる提案、アドバイス、または解決策は本当にありがたいです。

4

1 に答える 1

1

次のソリューションでは、ASP.NetAjaxエンジンのみを使用しています。PageLoadイベントでは、populateHidden()関数の呼び出しが登録されています。コードビハインドでは、属性でマークされたメソッドWebMethodが追加され、Ajaxリクエストによって(ポストバックなしで)呼び出すことができるようになりました。そのため、ボタンがクリックされると、javascript関数sendHiddenValueToServer()が呼び出され、Pageメソッドに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 に答える