[英]Button, changing CommandName and CommandArgs on the client side
有没有办法在客户端更改这两个属性的值,并在回发后反映在服务器端。 我试过了,但它似乎不起作用。 我也想在我委托提交的页面上有一个按钮,并在客户端分配这两个参数。 似乎不可能。 任何想法?
假设表单中有一个名为“cmd”的按钮
<script type="text/javascript" language="javascript">
$(document).ready(function () {
$("#<%=cmd.ClientID %>").click(function () {
$(this).attr("CommandName", "do").attr("CommandArgument", "arg2");
});
});
</script>
如果在回发之后检查值,它们仍然与回发之前相同。
我在这里遇到了同样的问题,我发现解决方案是使用 ajax 调用将我的按钮 ID 发送到我可以将其设置为会话变量的函数。 因为无法从静态调用中访问我想要更新的 asp 控件。 ajax 调用成功后,我单击一个隐藏按钮,该按钮使用非静态单击事件来操作我设置的会话变量并更新控件
我的链接是在中继器中生成的,它们对应于房子的不同房间。 当您单击该链接时,另一个中继器必须更新以显示与单击的房屋房间相关的已售产品
我从转发器生成的链接
<a href="#" class="changeroom" data-id="<%#Eval("NodeID")%>" data-toggle="tab"><%#Eval("DocumentName") %></a>
我的客户端方法
$('.changeroom').each(function () {
$(this).on('click', function () {
var id = $(this).attr('data-id');
var object = { 'sender': id };
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/App/Page Templates/FindByRoom.aspx/UpdateRoomID",
data: JSON.stringify(object),
success: function() {
$('#btnID').click();
}
});
});
});
btnID 是一个带有服务器端点击事件的简单 aspButton
最后是我的服务器端方法
protected void btnChangeRoom_OnClick(object sender, CommandEventArgs e)
{
int id = 0;
if (Session["RoomID"] == null) return;
Int32.TryParse(Session["RoomID"].ToString(), out id);
if (id == 0) return;
//do something with your buttons id
//i updated the path of a repeater and reloaded the data
}
[System.Web.Services.WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void UpdateRoomID(string sender)
{
HttpContext.Current.Session["RoomID"] = sender;
}
我试过你的代码,它工作正常。
只需通过添加 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”对客户端没有任何意义,也无法访问。
但是有解决方法。 但是根据您的应用程序的上下文,它们可能对您没有用处。
您可以尝试使用自己的属性,如此处建议的答案。
或者您可以在客户端执行 __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"]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.