【问题标题】:Jquery - Pass asp button command argument with jqueryJquery - 使用 jquery 传递 asp 按钮命令参数
【发布时间】:2012-11-20 18:10:08
【问题描述】:

我有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 或视图状态。

谢谢!

【问题讨论】:

  • 我认为在 dot 4 及更高版本中,出于安全原因,您不能从 javascript 更改命令参数 - 此参数是页面验证的一部分,不能更改。我不确定 100%,但我认为你不能这样做。解决方法添加一个隐藏的输入字段,更改该值,然后读取该帖子值。

标签: jquery asp.net eventargs


【解决方案1】:

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 方法。

【讨论】:

  • 试过了,但在我的情况下它没有进入代码隐藏。我用另一个按钮触发了那个点击。很明显 - 它们是 asp 按钮并进行回发。我最终的解决方案是客户端。我使用 onlcick ="another_jquery_function()" 制作了输入按钮来管理该值。感谢您的回答!
【解决方案2】:

我发现在提交按钮上使用 __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();

【讨论】:

    【解决方案3】:

    或者你可以试试这个:

    <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"];
     ...
    }
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        试试这个。它对我有用。

        //客户端JQuery:

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

        //服务器端点击方法

        String Param = Request.Form(btnTrigger.UniqueID)
        

        【讨论】:

          猜你喜欢
          • 2013-06-14
          • 2013-11-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          • 2016-02-20
          • 2015-10-26
          • 2015-02-28
          • 1970-01-01
          相关资源
          最近更新 更多