我试过你的代码,它工作正常。
只需通过添加 OnClientClick="return false;" 来确保您的按钮没有生成回发:
<asp:Button ID="cmd" runat="server" Text="Button" OnClientClick="return false;"></asp:Button>
此外,您不会在浏览器上看到“查看源代码”的差异。但是 DOM 已经发生了变化。使用 firebug 并添加 console.log 自己查看:
$("#<%=cmd.ClientID %>").click(function () {
$(this).attr("CommandName", "do").attr("CommandArgument", "arg2");
console.log(this);
});
console.log(this) 给了我以下信息:
编辑:
如果你考虑一下。如果按钮创建回发,那么一旦页面再次加载,按钮将自行重置为正常状态。
编辑 #2:
我不需要客户端上的更改
方面,我需要它在服务器端。
这就是重点
问题。我需要看到变化
服务器端,似乎没有
成为可能。 – 皮特卡
好吧...好吧,在那种情况下。这不可能。 “CommandArgument”和“CommandName”对客户端没有任何意义,也无法访问。
但是有一些变通方法。但是根据您的应用程序的上下文,它们可能对您没有用处。
您可以尝试使用自己的属性,如建议的答案here。
或者您可以在客户端执行 __doPostBack 并在后面的代码中获取 __EVENTARGUMENT。
(链接按钮用于通过asp.net生成__doPostBack函数。)
像这样:
<script type="text/javascript" language="javascript">
function DoPostBack() {
__doPostBack('cmd', 'thesearemyarguments');
}
</script>
页面:
<asp:Button ID="cmd" runat="server" Text="Button"
OnClientClick="DoPostBack(); return true;"
onclick="cmd_Click" ></asp:Button>
<asp:LinkButton ID="LinkButton1" runat="server" Visible="false">LinkButton</asp:LinkButton>
代码背后:
protected void cmd_Click(object sender, EventArgs e)
{
Response.Write(Request.Params["__EVENTARGUMENT"]);
}