1

各行でasp:Buttonを使用して、「ID」を「lvDataStores_OnButtonClick()」の背後にあるコードに渡しました。

ボタンをクリックする代わりに、行全体をクリック可能にしたい。私はこれを使用して行いました

<tr runat="server" class="altItemTableData" onclick='<%#"doPostBack("+Eval("ID")+")" %>'>

JS から、'btn_ViewMap' を押して、引数 'MapId' を渡しながらコード lvDataStores_OnButtonClick() を呼び出したいと思いますprotected void lvDataStores_OnButtonClick(Object sender, CommandEventArgs e)

しかし、mapId を引数として渡す方法がわかりません$$("btn_ViewMap")[0].click();。ATM私は次のようなものを使用しています:

<script type="text/javascript">
     function doPostBack(Mapid) 
     {
        alert("MAP ID is " + Mapid)
        $$("btn_ViewMap")[0].click();
     }

<asp:Button ID="btn_ViewMap" runat="server" visible="false" CommandName="View" CommandArgument='<%#Eval("ID")%>' OnCommand="lvDataStores_OnButtonClick" />
4

1 に答える 1

0

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 メソッドが定義されます。

于 2015-03-26T10:00:21.623 に答える