2012-11-20 61 views
4

ASP按鈕命令參數我有ASP按鈕:jQuery的 - 通過與jQuery

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

後,點擊它會提醒我命令參數。但在下一步 - 當我觸發btn1點擊jquery它去代碼隱藏和命令參數是空的。我可以通過jQuery來傳遞命令參數嗎?

我試圖將值保存到全局變量,但回發後它們都是空的。我不想使用cookie或viewstate。

謝謝!

+0

我認爲,在點4和高達你不能命令參數從JavaScript更改出於安全原因 - 這個參數是頁面驗證的一部分,不能改變。我不確定100%,但我認爲你不能那樣做。解決方法添加一個隱藏的輸入字段,更改該值並讀取該後期值。 – Aristos

回答

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

+0

試過,但在我的情況下,它沒有去隱藏代碼。我用另一個按鈕觸發了該點擊。很明顯 - 他們是asp按鈕,並做回發。我最終的解決方案是客戶端。我使用onlcick =「another_jquery_function()」創建了輸入按鈕來管理該val。 感謝您的回答! – Muno

+0

tnks !!這工作! = d – ch2o

1

或者你可以試試這個:

<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」可以通過任何字符串或變量來代替。
例如
$( '#日曆')。fullCalendar( 'GETDATE')。得到月()+ ' '+ $(' #日曆 ')。fullCalendar(' GETDATE')。和getFullYear()

CodeBehindFunction是單擊按鈕時在服務器上執行的函數背後的代碼(例如,打印報告並需要代碼隱藏功能中的jquery值的按鈕)。
在代碼隱藏功能,您可以通過獲得的Request.Form參數[「__ EVENTARGUMENT」]

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

我通常只添加屬性在代碼後面的按鈕,然後通過Javascript或jQuery的DOM的訪問。

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

這將渲染到頁面,然後您可以使用Javascript訪問該值。

1

我發現使用__doPostBack('id','args')在提交按鈕時會創建完整頁面回發。我覺得更容易的就是添加一個hiddenfield頁面,設置的值,然後調用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(); 
1

試試這個。它爲我工作。

//客戶端的JQuery:

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

//服務器端的點擊方法

String Param = Request.Form(btnTrigger.UniqueID)