开发者

Button, changing CommandName and CommandArgs on the client side

Is there a way to change the values for these two attributes on the client side and have it reflected on the server side after the postback. I tried it but it does not seem to work. I wanted to have one button on the page that I would delegate submits too, and assign these two arguments on the client side. Seems like not possible. An开发者_如何学Pythony idea?

Assuming there is a button named "cmd" in the form

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

        });

    </script>

If one checks the value after postback they are still the same as they were before postback.


I tried you're code and it works fine.

Just make sure you're button is not generating a postback by adding OnClientClick="return false;":

  <asp:Button ID="cmd" runat="server" Text="Button" OnClientClick="return false;"></asp:Button>

Also you won't see the difference in "view source" on your browser. But the change has been made in the DOM. Use firebug and add the console.log to see for yourself:

$("#<%=cmd.ClientID %>").click(function () {
    $(this).attr("CommandName", "do").attr("CommandArgument", "arg2");
    console.log(this);
});

The console.log(this) gave me the following:

Button, changing CommandName and CommandArgs on the client side

EDIT: If you think about it. If the button creates a postback, then the button will reset itself to normal once the page loads again.

EDIT #2:

I don't need the change on the client side, I need it on the server side. That was the whole point of the question. I need to see the change on the server side, and it does not seem to be possible. – epitka

Okay... Well, in that case. It is not possible. "CommandArgument" and "CommandName" means nothing to the client and is not accessible.

However there are work arounds. But depending on the context of your application they might not be useful to you.

You could try using your own attributes like the answer suggested here.

Or you could execute the __doPostBack on the client side and pick up the __EVENTARGUMENT on the code behind.

(The link button is there to generate the __doPostBack function by asp.net.)

Like such:

<script type="text/javascript" language="javascript">
    function DoPostBack() {
        __doPostBack('cmd', 'thesearemyarguments');

    }
</script>

Page:

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

Code Behind:

protected void cmd_Click(object sender, EventArgs e)
{
    Response.Write(Request.Params["__EVENTARGUMENT"]);
}


I was having the same problem here, I found the solution was to use an ajax call to send my buttons id to a function where i can set it as a session variable. Because the asp control I wanted to update could not be accessed from within a static call. On success of the ajax call I click a hidden button which uses a non static click event to manipulate the session variable i set and update the control

My links were generated within a repeater, and they correspond to different rooms of a house. When you click on the link there is another repeater that has to update to show products that are sold which are relevant to the room of the house that was clicked on

my link that is generated from the repeater

<a href="#" class="changeroom" data-id="<%#Eval("NodeID")%>" data-toggle="tab"><%#Eval("DocumentName") %></a>

my client side method

$('.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 is a simple aspButton with a server side click event

and finally my server side methods

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;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜