Jquery - 通过jquery传递asp按钮命令参数

6

我有一个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的点击时,它进入到codebehind中并且命令参数为空。我能否通过jquery传递命令参数?

我尝试将值保存到全局变量中,但是在postback之后它们都为空。而且我不想使用cookie或viewstate。

谢谢!


我认为在4版本及以上的点中,出于安全原因,您无法从JavaScript更改命令参数 - 这些参数是页面验证的一部分,不能更改。我不确定100%,但我认为您不能这样做。解决方法是添加一个隐藏的输入字段,更改该值,并读取该帖子值。 - Aristos
5个回答

10

CommandArgument完全是服务器端属性,不会呈现任何HTML属性。因此,您无法更改任何按钮的属性并触发它的点击。好消息是,您可以使用客户端的__doPostBack函数触发postback,并将自定义值作为第二个参数传递:

<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按钮并且会进行postback。最终我的解决方案是客户端处理。我创建了一个带有onlcick ="another_jquery_function()"的输入按钮来管理该值。谢谢回答! - Muno

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();

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是在单击按钮时在服务器上执行的代码后台函数(例如,打印报表并需要codebehind函数中的jquery值的按钮)。
在codebehind函数中,您可以通过Request.Form ["__EVENTARGUMENT"]获取参数。

protected void CodeBehindFunction(object sender, EventArgs e)
{
 string arguments = Request.Form["__EVENTARGUMENT"];
 ...
}

1
尝试这个。对我有效。

//客户端 JQuery:

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

//服务器端点击方法

String Param = Request.Form(btnTrigger.UniqueID)

1

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

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

这将呈现在页面上,您随后可以使用Javascript访问该值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接