asp.net 按钮,在客户端更改CommandName和CommandArgs

2ic8powd  于 2023-02-06  发布在  .NET
关注(0)|答案(2)|浏览(137)

有没有办法在客户端更改这两个属性的值,并在回发后将其反映到服务器端。我尝试过,但似乎不起作用。我想在页面上有一个按钮,我也将委托提交,并在客户端分配这两个参数。似乎不可能。有什么想法吗?
假设表单中有一个名为“cmd”的按钮

<script type="text/javascript" language="javascript">
        $(document).ready(function () {
            $("#<%=cmd.ClientID %>").click(function () {
                $(this).attr("CommandName", "do").attr("CommandArgument", "arg2");
            });

        });

    </script>

如果在回发之后检查值,它们仍然与回发之前的值相同。

voj3qocg

voj3qocg1#

我试过你的密码了,它很好用。
只需通过添加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:**

我不需要客户端的更改,我需要服务器端的更改。这就是问题的关键。我需要看到服务器端的更改,但这似乎是不可能的。-epitka
好的......好吧,在这种情况下。这是不可能的。"CommandArgument"和"CommandName"对客户端没有任何意义,也是不可访问的。
然而,也有一些变通方法,但根据应用程序的上下文,它们可能对您没有帮助。
您可以尝试使用自己的属性,如答案建议的here
或者,您可以在客户端执行__doPostBack,并在后面的代码中获取__EVENTARGUMENT。
(The link按钮用于通过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"]);
}
k10s72fa

k10s72fa2#

我在这里遇到了同样的问题,我发现解决方案是使用 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;
}

相关问题