[英]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.