2014-04-11 99 views
0

我有我想用在我的頁面中插入註釋一個asp.net Button控件。當我點擊按鈕時,我希望它調用一個方法而不是提交表單。我如何實現這一目標?使用asp.net按鈕的onclick方法,而不是提交表單

這是我到目前爲止已經試過 -

<%@ Page Language="C#" %> 
<!DOCTYPE html> 
    <script runat="server">  
protected void Button1_Click(object sender, EventArgs e) 
{ 
     //Do some stuff here 
} 
</script> 
    <head>title and other css links go here</head> 
<body> 
    <form id="form1" runat="server" onsubmit="false"> 
     //Some other asp.net controls go here 
     <asp:Button ID="Button1" runat="server" Text="Comment" OnClick="Button1_Click"/> 
    </form> 
</body> 
</html> 

是否有任何其他的方式來實現我在做什麼?歡迎提出建議。

+1

哪種方法? JavaScript,服務器端?回發有什麼問題? –

+0

我正在使用C#。不是JavaScript。我有多個按鈕在不同的表中做不同的插入。因此我不想回發。如果沒有其他工作,我會使用回發選項。 – newguy

回答

4

我真的不知道你的意思到底是什麼....我想你是詢問如何通過shout box插入到一個aspx評論??? ...也許?

這裏是插入任何你想從「方法」型(註釋)到您的形式......雖然它使用了比只是一個單一的方法更大量的代碼..這是最簡單的方法可以讓我想到...

這是您的default.aspx(通知no master頁面在這裏)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title>AJAX Example for comment</title> 
<link href="Main.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div id="page"> 
<div id="main"> 
    <div id="shoutbox"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <p>Here's what everyone is saying:</p> 
    <p> 
    <asp:UpdatePanel ID="ShoutBoxPanel1" runat="server"> 
     <ContentTemplate> 
     <asp:Label ID="lblShoutBox" runat="server"></asp:Label> 
     <asp:Timer ID="Timer1" runat="server" Interval="5000"> 
     </asp:Timer> 
     </ContentTemplate> 
     <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnAddShout" 
      EventName="Click" /> 
     </Triggers> 
    </asp:UpdatePanel> 
    </p> 
    <p> 
    <asp:UpdatePanel ID="ShoutBoxPanel2" runat="server" 
     UpdateMode="Conditional"> 
     <ContentTemplate> 
     <p class="label">Name:</p> 
     <p class="entry"> 
      <asp:TextBox ID="txtUserName" runat="server" 
       MaxLength="15" Width="100px"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
       runat="server" ErrorMessage="Name is required." 
       ControlToValidate="txtUserName" Display="Dynamic" 
       CssClass="error"> 
      </asp:RequiredFieldValidator> 
     </p> 
     <p class="label">Shout:</p> 
     <p class="entry"> 
      <asp:TextBox ID="txtShout" runat="server" 
       MaxLength="255" Width="220px"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
       runat="server" ErrorMessage="Shout is required." 
       ControlToValidate="txtShout" Display="Dynamic" 
       CssClass="error"> 
      </asp:RequiredFieldValidator> 
     </p> 
     <asp:Button ID="btnAddShout" runat="server" Text="Add Shout" 
      onclick="btnAddShout_Click" /> 
     <asp:UpdateProgress ID="UpdateProgress1" runat="server" 
      DynamicLayout="False"> 
      <ProgressTemplate> 
      <img src="Images/spinner.gif" alt="Please Wait" /> 
      Comment... 
      </ProgressTemplate> 
     </asp:UpdateProgress> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </p> 
</div> 
</div> 
</div> 
</form> 
</body> 
</html> 

這是你的C#代碼

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Text; 
public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    ShoutItemList shoutBox; 
    if (Application["ShoutBox"] == null) 
    { 
     shoutBox = new ShoutItemList(); 
     Application.Add("ShoutBox", shoutBox); 
    } 
    else 
    { 
     shoutBox = (ShoutItemList)Application["ShoutBox"]; 
     lblShoutBox.Text = shoutBox.Display(); 
    } 
    if (ScriptManager1.IsInAsyncPostBack != true) 
     txtUserName.Focus(); 
} 


protected void btnAddShout_Click(object sender, EventArgs e) 
{ 
    ShoutItem shout = new ShoutItem(); 
    shout.UserName = txtUserName.Text; 
    shout.Comment = txtShout.Text; 
    shout.Timestamp = DateTime.Now; 

    Application.Lock(); 
    ShoutItemList shoutBox = (ShoutItemList)Application["ShoutBox"]; 
    shoutBox.Add(shout); 
    Application.UnLock(); 

    lblShoutBox.Text = shoutBox.Display(); 
    txtShout.Text = ""; 
    txtShout.Focus(); 
} 
} 
public class ShoutItem 
{ 
    public string UserName { get; set; } 
    public DateTime Timestamp { get; set; } 
    public string Comment { get; set; } 
} 
public class ShoutItemList 
{ 
private List<ShoutItem> shoutList = new List<ShoutItem>(); 

private void Purge() 
{ 
    DateTime purgeTime = DateTime.Now; 
    purgeTime = purgeTime.AddMinutes(-3); 

    int i = 0; 
    while (i < shoutList.Count) 
    { 
     if (shoutList[i].Timestamp <= purgeTime) shoutList.RemoveAt(i); 
     else i += 1; 
    } 
} 

public void Add(ShoutItem shout) 
{ 
    Purge(); 
    System.Threading.Thread.Sleep(2000); 
    shoutList.Insert(0, shout); 
} 

public string Display() 
{ 
    Purge(); 
    StringBuilder shoutBoxText = new StringBuilder(); 
    if (shoutList.Count > 0) 
    { 
     shoutBoxText.AppendLine("<dl>"); 
     foreach (ShoutItem shout in shoutList) 
     { 
      shoutBoxText.Append("<dt>" + shout.UserName + " ("); 
      shoutBoxText.Append(shout.Timestamp.ToShortTimeString() + ")</dt>"); 
      shoutBoxText.AppendLine("<dd>" + shout.Comment + "</dd>"); 
     } 
     shoutBoxText.AppendLine("</dl>"); 
    } 
    return shoutBoxText.ToString(); 
} 
} 

這將允許你插入你想要的任何評論。您可以修改此代碼以自己請....

讓我知道這是你尋求答案。

+0

是的,這與我想達到的非常相似。謝謝。你能解釋我在哪裏存儲評論嗎?以及如何在清除之前延長評論的持續時間? – newguy

+2

@newguy在我給你的例子中,它並沒有被存儲在任何地方。它從視覺工作室虛擬服務器上運行,一旦瀏覽器關閉,評論就消失了......我想......如果我錯了,請任何人糾正我。我真的不知道如果你給它一個域名並支付了一個主機並把它像現在一樣扔到那裏,會發生什麼......但最初的問題是你使用的數據庫如MySQL,Oracle或在這種情況下,我會說MS SQL。 http://geekswithblogs.net/dotNETvinz/archive/2009/02/24/creating-a-simple-shoutbox-with-multiline-textbox.aspx –

+2

@newguy另外,如果你不太瞭解數據庫,這是隻能用於小事......你可以使用訪問數據庫。我猜這會更便宜。而且更容易編碼? –

2

使用按鈕的OnClientClick這個,像這樣:

<asp:Button ID="Button1" runat="server" Text="Comment" OnClientClick="return javascriptFunction();" OnClick="Button1_Click"/> 

那麼你的JavaScript函數看起來像這樣

function javascriptFunction() { 
    //do something here 
    return false; //if you don't want the form to POST to the server, leave this as false, otherwise true will let it continue with the POST 

} 
+0

您能否解釋爲什麼我們需要調用javascript函數? onclientclick事件是否停止提交表單? – newguy

+0

我假設你想做點什麼,如果按鈕被點擊。如果你不想按鈕做任何事情,只需在你的clientclick事件中返回false。我誤解你的意圖了嗎? – attila

+0

是的你是對的。我確實希望按鈕在我的數據庫中插入記錄。這將由button1_click函數處理。我很抱歉,但我不明白你爲什麼建議使用onclientclick方法? – newguy

相關問題