5

我有asp按钮:

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

和脚本:

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

单击后它会提醒我命令参数。但是在下一步中-当我使用 jquery 触发 btn1 单击时,它会转到代码隐藏并且命令参数为空。我可以用 jquery 以某种方式传递命令参数吗?

我试图将值保存到全局变量,但回发后它们都是空的。我不想为此使用 cookie 或视图状态。

谢谢!

4

5 回答 5

9

CommandArgument完全是服务器端属性,不呈现任何 html 属性。所以你不能改变任何按钮的属性并点击它。好消息是您可以使用客户端 __doPostBack 函数触发回发,并将您的自定义值作为第二个参数传递:

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

您可以从 Request.Form 集合中获取服务器单击处理程序中传递的参数:

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

如果上面的脚本不起作用,那么页面上可能没有定义 __doPostBack 函数。在这种情况下,将此代码添加到 Page_PreRender 方法:ClientScript.GetPostBackEventReference(btn1, string.Empty);这将强制页面__doPostBack在页面上定义方法。

于 2012-11-20T21:38:05.017 回答
3

我发现在提交按钮上使用 __doPostBack('id','args') 会创建一个完整的页面回发。我发现更容易的是在页面中添加一个隐藏字段,设置值,然后调用 button.click() 事件

    <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();
于 2015-11-04T21:11:37.400 回答
2

或者你可以试试这个:

<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' 可以替换为任何字符串或变量。
例如
$('#calendar').fullCalendar('getDate').getMonth()+','+$('#calendar').fullCalendar('getDate').getFullYear()

CodeBehindFunction 是当您单击按钮时在服务器上执行的代码隐藏函数(例如,打印报告并需要代码隐藏函数中的 jquery 值的按钮)。
在代码隐藏函数中,您可以通过 Request.Form["__EVENTARGUMENT"] 获取参数

protected void CodeBehindFunction(object sender, EventArgs e)
{
 string arguments = Request.Form["__EVENTARGUMENT"];
 ...
}
于 2012-12-07T12:57:54.087 回答
1

我通常只是在后面的代码中为按钮添加一个属性,然后通过 Javascript 或 jQuery 中的 DOM 访问它。

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

这将呈现到页面,然后您可以使用 Javascript 访问该值。

于 2013-05-16T14:35:57.907 回答
1

尝试这个。它对我有用。

//客户端JQuery:

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

//服务器端点击方法

String Param = Request.Form(btnTrigger.UniqueID)
于 2017-01-30T15:35:00.740 回答