0

隠されたフィールドを理解するのを手伝ってくれないかと思っていました。私はそれらを機能させているとは思わないからです。

aspxページで私は持っています:

<asp:HiddenField ID="hidVal" value="" runat="server" />

ボタンをクリックすると、JavaScript関数が呼び出されます

<button type="button" id="search" onclientclick="search_click()">Search</button> 

機能があります

function search_click() {
    document.getElementById('hidVal').Value = "1";

    <% save(); %>
}

aspx.csには、これを行う関数があります。

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\fgreene\Desktop\savedAdresses.txt", true))
{
    file.WriteLine(hidVal.Value);
}

ボタンをクリックした後、ファイルを調べますが、変更はありません。
私のアプローチは正しいですか、それともこれがどのように機能するのか理解していませんか?

4

4 に答える 4

1

aspx<% save(); %>ページに JavaScript 関数を配置すると、周囲の JavaScript 関数がクライアントで呼び出されたときではなく、サーバーでページが構築されたときにsave実行されます。この時点で隠しフィールドは空なので、ファイルには空白行が書き込まれます。ユーザーがボタンをクリックすると、隠しフィールドが埋められますが、これが発生したことをサーバーに伝えるものは何もありません。

代わりに行う必要があるのは、次のようなものです。

// In your aspx, for the javascript function: remove the call to save,
// use the correct ID for the hidden field
function search_click() {
    document.getElementById('<%= hidVal.ClientID %>').Value = "1";
}

// In your aspx in place of the button put
<asp:Button id="search" runat="server"
            onclientclick="search_click(); return true;" onclick="search_click">
    Search
</asp:Button>
// This results in a button that calls the javascript function on click, and
// then posts back to the server saying that the button has been clicked

// In your C#, this function gets called when the client posts back to
// say that the button has been clicked.
public protected void search_click(object sender, EventArgs e)
{
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(
               @"C:\Users\fgreene\Desktop\savedAdresses.txt", true))
    {
        file.WriteLine(hidVal.Value);
    }
}
于 2012-11-29T16:39:12.603 に答える
1

hidValHTML で生成される実際のクライアント側 ID は、親コントロールの名前付けコンテナーに基づいているため、非表示フィールドのクライアント ID を参照する必要があります。これはおそらく ではありません。これを修正するには 2 つの方法があります。まず、コントロールでクライアント ID を静的にすることができます(これは基本的に、ASP.NETに、私が言ったとおりの ID を作成するように指示します)。

<asp:HiddenField ID="hidVal" value="" ClientIDMode="Static" runat="server" />

次に、JavaScript を生成するときにサーバーから ClientID プロパティを検索できます。

document.getElementById('<%= hidVal.ClientID %>').Value = "1";

これにより、実際のクライアント ID が JavaScript コードで直接レンダリングされます。おそらくどちらの方法でも問題ありませんが、2 番目の方法は、JavaScript が静的な .JS ファイルではなく ASPX ファイルに直接埋め込まれている場合にのみ機能します。

サーバー側メソッドの呼び出し:

質問の 2 番目の部分は、ボタンが押されたときにサーバー側のコードを呼び出すことです。OnClickボタンにハンドラーをアタッチして、これを行う必要があります。

<button runat="server" id="BtnSearch" onclientclick="search_click()" OnClick="btnSearch_Click">Search</button>

ボタンが押されると、ページがポストバックされ、btnSearch_Clickイベント ハンドラーが呼び出されます。その後、サーバー側のロジックを処理したり、隠しフィールドの値を確認したりできます。お役に立てれば!

于 2012-11-29T16:37:00.557 に答える
0

あなたがしようとしているのは、クライアント側の呼び出しを介してサーバー側の関数 (保存) を実行することです。これは、ページが最初にロードされたときに save() を呼び出してから、戻り値 (おそらく何もない) を配置したコードに入れるため、機能しません。

<% save(); %>

代わりに、保存機能を起動するボタンが必要ですが、最初に JavaScript を起動します。これを行うには、asp:button (としてレンダリング) を作成してから、"OnClientClick" (JavaScript 用) と "OnClick" (サーバー側関数用) の両方を追加します。

<asp:Button id="btnSearch" runat="server" OnClick="btnSearch_Click" OnClientClick="search_click()" text="Search" />

次に、C# コードで、メソッドに OnClick 値と同じ名前を付ける必要があります。

protected void btnSearch_Click(object sender, EventArgs e)
{
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\fgreene\Desktop\savedAdresses.txt", true))
    {
        file.WriteLine(hidVal.Value);
    }
}

サーバー側関数を作成する最も簡単な方法は、デザイン ビューでボタンをダブルクリックすることです。これにより、正しいメソッド呼び出しが追加されます。

お役に立てれば。

于 2012-11-29T16:40:21.950 に答える
0

サーバー側イベントとクライアント側イベントの両方で非表示フィールドの値を変更できます。

クライアント側で値を変更する

  <script type="text/javascript">
        function setvalue() {
            document.getElementById('hidVal').value = "1";
        }
  </script>

  <div>
     <asp:HiddenField ID="hidVal" value="" runat="server" />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="setvalue();" />
  </div>

サーバーサイドで値を変更する

    <div>
       <asp:HiddenField ID="hidVal" value="" runat="server" />
        <br />
       <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    </div>

   protected void Button1_Click(object sender, EventArgs e)
    {
        hidVal.Value = "1";
    }
于 2012-12-01T10:07:37.050 に答える