5

私はaspボタンを持っています:

<asp:button ID="btn1" runat="server" CommandArgument="" CssClass="btn1" OnClick="button_click"></asp:button>

およびスクリプト:

$("a").click(function () {
            var val = $(this).attr('id').toString();                            
            $('.btn1').attr('CommandArgument',val);
            alert($('.btn1').attr('CommandArgument').toString());
            $('.btn1').click();
        });

クリックすると、コマンド引数が表示されます。しかし、次のステップでは、jqueryでbtn1クリックをトリガーすると、コードビハインドに移動し、コマンド引数が空になります。jqueryでなんとかしてコマンド引数を渡すことはできますか?

グローバル変数に値を保存しようとしましたが、ポストバック後はすべて空です。そして、私はそのためにクッキーやビューステートを使いたくありません。

ありがとう!

4

5 に答える 5

9

CommandArgument完全にサーバー側のプロパティであり、html属性をレンダリングしません。したがって、ボタンの属性を変更してクリックすることはできません。良いニュースは、クライアント側の__doPostBack関数を使用してポストバックを起動し、カスタム値を2番目のパラメーターとして渡すことができることです。

<script type="text/javascript">
    $("a").click(function () {
        var val = $(this).attr('id').toString();
        __doPostBack("<%= btn1.UniqueID %>", val);
    });
</script>

そして、Request.Formコレクションからサーバークリックハンドラーで渡された引数を取得できます。

protected void button_click(object sender, EventArgs e)
{
    var argument = Request.Form["__EVENTARGUMENT"];
}

上記のスクリプトが機能しない場合は、ページで__doPostBack関数が定義されていない可能性があります。この場合、このコードをPage_PreRenderメソッドに追加します。ClientScript.GetPostBackEventReference(btn1, string.Empty);これにより、ページはページ上でメソッドを定義するように強制__doPostBackされます。

于 2012-11-20T21:38:05.017 に答える
3

__doPostBack('id'、'args')を使用すると、送信ボタンでフルページのポストバックが作成されます。ページに隠しフィールドを追加し、値を設定してから、button.click()イベントを呼び出す方が簡単だと思います。

    <asp:Button ID="btnTrigger" runat="server" ClientIDMode="Static" OnClick="btnTrigger_Click" />
    <asp:HiddenField ID="CommandArg" runat="server" ClientIDMode="Static" />


    $('#CommandArg').val('my argument');
    $('#btnTrigger').click();
于 2015-11-04T21:11:37.400 に答える
2

または、これを試すことができます:

<script type="text/javascript">
    function MaybeThisWorks(obj)
    {
        __doPostBack( obj.id, 'OtherInformation' );
        return true;
    }
</script>

...

<asp:Button Text="ButtonValue" ID="RepP1" runat="server" OnClientClick="MaybeThisWorks(this);" OnClick="CodeBehindFunction" />

「OtherInformation」は、任意の文字列または変数に置き換えることができます。
例:
$('#calendar')。fullCalendar('getDate')。getMonth()+'、' + $('#calendar')。fullCalendar('getDate')。getFullYear()

CodeBehindFunctionは、ボタンをクリックしたときにサーバー上で実行されるコードビハインド関数です(たとえば、レポートを出力し、codebehind関数でjquery値を必要とするボタン)。
コードビハインド関数では、Request.Form["__EVENTARGUMENT"]によって引数を取得できます。

protected void CodeBehindFunction(object sender, EventArgs e)
{
 string arguments = Request.Form["__EVENTARGUMENT"];
 ...
}
于 2012-12-07T12:57:54.087 に答える
1

私は通常、コードビハインドのボタンに属性を追加し、JavascriptまたはjQueryのDOMを介してそれにアクセスします。

 mybutton.Attributes.Add("MyVar", "MyValue");

これによりページがレンダリングされ、Javascriptを使用して値にアクセスできます。

于 2013-05-16T14:35:57.907 に答える
1

これを試して。それは私のために働いた。

//クライアント側のJQuery:

$('#btnTrigger').val('MyParameter');
$('#btnTrigger').click();

//サーバーサイドクリック方式

String Param = Request.Form(btnTrigger.UniqueID)
于 2017-01-30T15:35:00.740 に答える