簡體   English   中英

背后的事件按鈕:AJAX,C#,asp.net

[英]Event button behind : AJAX, C#, asp.net

要在一行中恢復:我提出了一個AJAX請求,以創建一個帶有按鈕的表,然后單擊此按鈕並顯示它。 當我單擊按鈕時,問題出在事件和回發之間。

我嘗試制作一個按鈕並發送AJAX請求:這是AJAX部分:

  $.ajax({
            type: "POST",
            url: "WebForm1.aspx/createTable",
            data: JSON.stringify({ id: idArgument }),
            contentType: "application/json; charset=utf-8",
            success: function(msg) 
            {
                 if(msg.d != "")
                 {
                        $('#tableauArticles').empty();
                        $('<div class="newtable">').html(msg.d).appendTo('#tableauArticles');
                  }
             }
       });

tableauArticles是一個表,在其中放置了文檔名稱和一個按鈕。 這是“ createTable”:

 var page = (WebForm1)HttpContext.Current.CurrentHandler;
 System.Web.UI.WebControls.Table tableau = page.CreateTableNonStatique(id);

  var stringWriter = new StringWriter();
  using (var htmlWriter = new HtmlTextWriter(stringWriter))
  {
         tableau.RenderControl(htmlWriter);
  }
  string tableauString = stringWriter.ToString();

  return tableauString;

CreateTableNonStatique只是一個用c#代碼創建表的函數,它似乎可以正常工作,因為我看到了我想要看到的東西。 問題出在表上的按鈕:當我單擊它時,它將刷新頁面。

我進行了搜索,發現很多阻止回發的內容:

boutonLire.OnClientClick = "return false;";

要么

boutonLire.UseSubmitBehavior = false;

並且可以正常工作 ,但是我沒有任何事件 :它不會回發,但是即使

boutonLire.Click += new EventHandler(testReturn);

boutonLire.Click += (sender, eventArgs) =>
{
    // function
}

最糟糕的是

boutonLire.OnClientClick = "test(); return false;";

讓按鈕刷新頁面,就像

boutonLire.OnClientClick = "return testReturn();";

public bool testReturn()
{
    return false;
}

這是我在按鈕旁的全部內容,並進行了測試:

           TableCell celluleBouton = new TableCell();
           Button boutonLire = new Button();

           boutonLire.Text = "Telecharger";
           boutonLire.ID = svgID.ToString();
           boutonLire.Attributes.Add("OnClick","testReturn(event);"); 

           /*boutonLire.OnClientClick = "return testReturn();";
           boutonLire.UseSubmitBehavior = false;
           boutonLire.Click += new EventHandler(testReturn);

           boutonLire.Click += (sender, eventArgs) =>
           {
                Guid fichierID = svgID;
                if (fichierID == null)
                    fichierID = Guid.Empty;
                buttonDownload_Click(fichierID);
            };*/

            celluleBouton.Controls.Add(boutonLire);
            tableColonne.Cells.Add(celluleBouton);
            tableau.Rows.Add(tableColonne);

還有腳本,在Neel的幫助下:

<script> 
    $(function testReturn(event) 
    {
        alert("beforePrevent"); 
        event.preventDefault();
        alert("afterPrevent");
    }) 
</script> 

每次刷新時都會顯示“ beforePrevent”,而不會顯示“ afterPrevent”。

謝謝 !

在單擊此鏈接時, return false將取消瀏覽器的default behavior

這意味着所有其他瀏覽器行為都將被取消。

那么該怎么辦?

好了,您可以使用event.preventDefault()而不是返回false!

試試看!

檢查一下: -http : //fuelyourcoding.com/jquery-events-stop-misusing-return-false/

對於我來說,這里的答案是:return false; 足夠,但是event.preventDefault()也必須工作(我只是不知道如何將事件作為參數傳遞,但是...此代碼有效)

 TableCell celluleBouton = new TableCell();
 System.Web.UI.WebControls.Button boutonLire = new System.Web.UI.WebControls.Button();

  boutonLire.Text = "Telecharger";
  boutonLire.ID = svgID.ToString();

  boutonLire.Attributes.Add("onclick", "return clicArticle(this);");

  // on le crée graphiquement
  celluleBouton.Controls.Add(boutonLire);
  tableColonne.Cells.Add(celluleBouton);
  tableau.Rows.Add(tableColonne);

因此,當單擊它時:

 <script>
        function clicArticle(boutton)
        {
            var idArgument=boutton.id;

            $.ajax
            ({
                type: "POST",
                url: "WebForm1.aspx/telechargerStatique",
                data: JSON.stringify({ id: idArgument }),
                contentType: "application/json; charset=utf-8",
                success: function(msg) 
                {
                    alert(msg.d);
                    // here, display the file      
                    return false;
                }
            })
            return false;
        }
    </script>

希望對您有所幫助! 謝謝 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM