1

我在每一行上使用一个 asp:Button 将“ID”传递给“lvDataStores_OnButtonClick()”后面的代码。

我不想点击按钮,而是想让整行都可以点击。我已经使用

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

然后我想从 JS 中按下 'btn_ViewMap' 并调用代码 lvDataStores_OnButtonClick() 同时传递参数 'MapId' ......因为我可以调用后面的代码' 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 函数触发回发,并将您的自定义值作为第二个参数传递:

<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 回答