Используйте метод onclick кнопки asp.net вместо отправки формы

0

У меня есть элемент управления asp.net Button, который я хочу использовать для вставки комментариев на мою страницу. Когда я нажимаю кнопку, я хочу, чтобы он вызывал метод вместо отправки формы. Как мне это достичь?

Это то, что я пробовал до сих пор -

 <%@ 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 #. Не яваскрипт У меня есть несколько кнопок, чтобы сделать разные вставки в разных таблицах. Следовательно, я не хочу постбэк. Я пойду с опцией обратной передачи, если ничего не работает.
Теги:

2 ответа

4
Лучший ответ

Я не знаю точно, что вы имеете в виду... Я думаю, вы просите, как вставить комментарий в aspx через shout box???... Может быть?

Вот код для вставки того, что вы хотите ввести (комментарий) в свою форму из "метода"... хотя он использует намного больше, чем только один метод. Это самый простой способ, о котором я могу думать.,

Это ваш default.aspx (no master здесь 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 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>

И это ваш код С#

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
    Да, это очень похоже на то, чего я хочу достичь. Спасибо. Не могли бы вы объяснить, где хранятся комментарии? и как мне продлить продолжительность комментариев до их очистки?
  • 2
    @newguy Ну, в приведенном мной примере он нигде не хранится. Он работает на виртуальном сервере визуальных студий, и как только браузер закрывается, комментарии исчезают ... Я думаю ... И, пожалуйста, кто-нибудь поправит меня, если я ошибаюсь. Я на самом деле не знаю, что произойдет, если вы дадите ему доменное имя, заплатите за хост и создадите сайт там, как сейчас ... Хотя на первоначальный вопрос вы используете базу данных, такую как MySQL, Oracle или в этом случае я бы сказал MS SQL. geekswithblogs.net/dotNETvinz/archive/2009/02/24/...
Показать ещё 1 комментарий
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 форму для отправки?
  • 0
    Я предположил, что вы хотите сделать что-то, если кнопка была нажата. Если вы не хотите, чтобы кнопка что-то делала, просто верните false в событии clientclick. Я неправильно понимаю ваше намерение?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню