Jquery - Pass asp button command argument with jquery
Asked Answered
R

5

6

I have asp button:

<asp:button ID="btn1" runat="server" CommandArgument="" CssClass="btn1" OnClick="button_click"></asp:button>

and script:

$("a").click(function () {
            var val = $(this).attr('id').toString();                            
            $('.btn1').attr('CommandArgument',val);
            alert($('.btn1').attr('CommandArgument').toString());
            $('.btn1').click();
        });

after click it alerts me command argument. But on next step - when i trigger btn1 click with jquery it goes to codebehind and command argument is empty. Can i pass somehow command argument with jquery?

I've tried to save value to global variables but after postback they're all empty. And i don't want to use cookies or viewstate for that.

Thanks!

Robillard answered 20/11, 2012 at 18:10 Comment(1)
I think that in dot 4 and up you can not change the command argument from javascript for security reasons - this arguments are part of the validation of the page and can not be change. I am not sure 100% but I think that you cant do that. Workaround add a hidden input field, change that value, and read that post value.Tham
T
10

CommandArgument is completely a server-side property and doesn't render any html attribute. So you can't change any button's attribute and fire click on it. The good news is that you can fire postback with client-side __doPostBack function and pass your custom value as second parameter:

<script type="text/javascript">
    $("a").click(function () {
        var val = $(this).attr('id').toString();
        __doPostBack("<%= btn1.UniqueID %>", val);
    });
</script>

And you can get passed argument in server click handler from the Request.Form collection:

protected void button_click(object sender, EventArgs e)
{
    var argument = Request.Form["__EVENTARGUMENT"];
}

If script above won't work then maybe __doPostBack function not defined on page. In this case add this code to Page_PreRender method: ClientScript.GetPostBackEventReference(btn1, string.Empty); this will force page to define __doPostBack method on page.

Typeface answered 20/11, 2012 at 21:38 Comment(1)
Tried that but in my case it didn't go to codebehind. I triggered that click with another button. Quite obvious - they are asp buttons and do postback. My solution in the end was client side. I made input button with onlcick ="another_jquery_function()" to manage that val. Thanks for answer!Robillard
S
3

I find using __doPostBack('id','args') creates a full page postback when on a submit button. I find it easier is add a hiddenfield the page, set the value, then call the button.click() event

    <asp:Button ID="btnTrigger" runat="server" ClientIDMode="Static" OnClick="btnTrigger_Click" />
    <asp:HiddenField ID="CommandArg" runat="server" ClientIDMode="Static" />


    $('#CommandArg').val('my argument');
    $('#btnTrigger').click();
Spitler answered 4/11, 2015 at 21:11 Comment(0)
D
2

Or you can try this one:

<script type="text/javascript">
    function MaybeThisWorks(obj)
    {
        __doPostBack( obj.id, 'OtherInformation' );
        return true;
    }
</script>

...

<asp:Button Text="ButtonValue" ID="RepP1" runat="server" OnClientClick="MaybeThisWorks(this);" OnClick="CodeBehindFunction" />

'OtherInformation' can be replaced by any string or variable.
e.g.
$('#calendar').fullCalendar('getDate').getMonth()+','+$('#calendar').fullCalendar('getDate').getFullYear()

CodeBehindFunction is the code behind function that executes on the server when you click the button (e.g. a button that prints a report and needs jquery values in codebehind function).
In codebehind function you can get the arguments by Request.Form["__EVENTARGUMENT"]

protected void CodeBehindFunction(object sender, EventArgs e)
{
 string arguments = Request.Form["__EVENTARGUMENT"];
 ...
}
Discordance answered 7/12, 2012 at 12:57 Comment(0)
D
1

I usually just add an attribute to the button in the code behind, then access it through the DOM in Javascript or jQuery.

 mybutton.Attributes.Add("MyVar", "MyValue");

This will render out to the page, and you can then access the value using Javascript.

Disjuncture answered 16/5, 2013 at 14:35 Comment(0)
K
1

Try this. It worked for me.

//Client Side JQuery:

$('#btnTrigger').val('MyParameter');
$('#btnTrigger').click();

//Server side click method

String Param = Request.Form(btnTrigger.UniqueID)
Katzir answered 30/1, 2017 at 15:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.