Окно сообщений веб-приложения ASP.NET - PullRequest
31 голосов
/ 15 марта 2012

В приложении оконных форм asp.net в коде C # вы можете использовать:

MessageBox.Show("Here is my message");

Есть ли эквивалент в веб-приложении asp.net? Могу ли я вызвать что-то из кода C #, который будет отображать окно сообщения для пользователя?

Пример использования этого: у меня есть кнопка, которая загружает файл в коде позади. Когда файл загружен или если произошла ошибка, я хотел бы высказать пользователю сообщение с указанием результата.

Есть идеи по этому поводу?

Ответы [ 13 ]

63 голосов
/ 15 марта 2012

Вы хотите использовать оповещение.К сожалению, это не так хорошо, как с окнами.

ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + myStringVariable + "');", true);

Похоже на этот вопрос здесь: http://forums.asp.net/t/1461308.aspx/1

15 голосов
/ 20 января 2014

Или создайте такой метод в своем решении:

public static class MessageBox {
    public static void Show(this Page Page, String Message) {
       Page.ClientScript.RegisterStartupScript(
          Page.GetType(),
          "MessageBox",
          "<script language='javascript'>alert('" + Message + "');</script>"
       );
    }
}

Тогда вы можете использовать его как:

MessageBox.Show("Here is my message");
9 голосов
/ 23 июля 2014

Только для записей.

Вот ссылка от Microsoft , которая, на мой взгляд, является лучшим способом представить MessageBox в ASP.Net

Также представлены варианты, такие как Да и НЕТ .

Инструкции по получению класса по ссылке , работающей над вашим проектом:

  1. Если в вашем проекте нет папки App_Code , создайте ее.
  2. Щелкните правой кнопкой мыши папку App_Code и создайте класс. Назовите его MessageBox.cs
  3. Скопируйте текст из файла MessageBox.cs ( из прикрепленного кода ) и вставьте его в файл MessageBox.cs .
  4. Выполните те же действия, что и шаги 2 и 3 для файла MessageBoxCore.cs .
  5. Важное замечание: Щелкните правой кнопкой мыши каждый файл MessageBox.cs и MessageBoxCore.cs и убедитесь, что установлено 'Build Action' Компилировать
  6. Добавьте этот код на страницу aspx , где вы хотите отобразить окно сообщения:

    <asp:Literal ID="PopupBox" runat="server"></asp:Literal>
    
  7. Добавьте этот код на страницу cs , на которой вы хотите принять решение:

    string title = "My box title goes here";
    string text = "Do you want to Update this record?";
    MessageBox messageBox = new MessageBox(text, title, MessageBox.MessageBoxIcons.Question, MessageBox.MessageBoxButtons.YesOrNo, MessageBox.MessageBoxStyle.StyleA);
    messageBox.SuccessEvent.Add("YesModClick");
    PopupBox.Text = messageBox.Show(this);
    
  8. Добавьте этот метод на страницу cs . Это то, что будет выполнено, когда пользователь нажмет Да. Вам не нужно делать еще один для NoClick метода.

    [WebMethod]
    public static string YesModClick(object sender, EventArgs e)
    {
        string strToRtn = "";
        // The code that you want to execute when the user clicked yes goes here
        return strToRtn;
    }
    
  9. Добавьте файл WebUserControl1.ascx в корневой каталог и добавьте этот код в файл:

    <link href="~/Styles/MessageBox.css" rel="stylesheet" type="text/css" />
    <div id="result"></div>
    <asp:ScriptManager runat="server" ID="scriptManager" EnablePageMethods="True">
    </asp:ScriptManager>  //<-- Make sure you only have one ScriptManager on your aspx page.  Remove the one on your aspx page if you already have one.
    
  10. Добавьте эту строку поверх вашей aspx страницы:

    <%@ Register src="~/MessageBoxUserControl.ascx" tagname="MessageBoxUserControl" tagprefix="uc1" %>
    
  11. Добавьте эту строку на страницу aspx (внутри тега asp: Content , если он у вас есть)

    <uc1:MessageBoxUserControl ID="MessageBoxUserControl1" runat="server" />
    
  12. Сохраните файлы изображений 1.jpg, 2.jpg, 3.jpg, 4.jpg из проекта Microsoft выше, в ваш ~/Images/ путь.

  13. Выполнено

Надеюсь, это поможет.

Pablo

3 голосов
/ 15 марта 2012

Существует несколько вариантов создания окна сообщений на стороне клиента в ASP.NET - см. здесь , здесь и здесь , например ...

2 голосов
/ 15 марта 2012

Почему бы не использовать jquery popup для этой цели. Я использую bpopup для этой цели. Подробнее об этом.
http://dinbror.dk/bpopup/

2 голосов
/ 15 марта 2012

не совсем. Серверный код происходит на сервере - вы можете использовать javascript для отображения чего-либо пользователю на стороне клиента, но, очевидно, он будет выполняться только на стороне клиента. Это природа клиент-серверной веб-технологии. Вы в основном отключены от сервера, когда получаете ответ.

1 голос
/ 29 ноября 2016

Как уже отмечали другие, окно сообщения будет на стороне клиента Javascript.Таким образом, проблема заключается в том, как заставить окно сообщений JS на стороне клиента со стороны сервера.Простое решение состоит в том, чтобы включить это в HTML:

<script>
    var data = '<%= JsData %>';
    alert(data);
</script>

и заполнить это data из кода на стороне сервера:

public partial class PageName : Page
{
    protected string JsData = "your message";

Обратите внимание, что строковое значение должнобыть строкой Javascript, т. е. быть однострочным, но она может содержать экранированные символы новой строки как \n.

Теперь вы можете использовать все свои навыки и приемы Javascript или JQuery для выполнения всего, что вы хотите, с этим текстом сообщенияна стороне клиента, например, отображать простой alert(), как показано в примере кода выше, или сложное окно сообщения или баннер сообщения.

(обратите внимание, что всплывающие окна иногда осуждаются и блокируются)

Обратите внимание, что благодаря протоколу HTTP сообщение может отображаться только в ответ на запрос HTTP, который пользователь отправляет на сервер.В отличие от приложений WinForm, веб-сервер не может отправить сообщение клиенту, когда сочтет нужным.

Если вы хотите показать сообщение только один раз, а не после того, как пользователь обновляет страницу с помощью F5, вы можете установить ипрочитайте куки с кодом JavaScript.В любом случае, приятным моментом в этом методе является то, что это простой способ передачи данных с сервера в javascript на клиенте, и что вы можете использовать все функции javascript для выполнения всего, что вам нравится.

1 голос
/ 06 ноября 2014

'ASP.net MessageBox

'Добавить скрипт-менеджер на страницу ASP.Net

<asp:scriptmanager id="ScriptManager1" runat="server" />

попробовать:

{

  string sMsg = "My Message";

  ScriptManager.RegisterStartupScript(Page, Page.GetType, Guid.NewGuid().ToString(), "alert('" + sMsg + "')", true);

}
1 голос
/ 15 марта 2012

Есть несколько решений; если вы знакомы с CSS, вот очень гибкое решение:

Создайте соответствующий стиль Panel, который напоминает «Окно сообщений», поместите в него Label и установите для его свойства Visible значение false. Затем всякий раз, когда пользователю нужно увидеть сообщение после обратной передачи (например, нажав кнопку), из codebehind установите свойство Label s Text на желаемое сообщение об ошибке и установите Panel Visible свойство до true.

0 голосов
/ 20 ноября 2014

Вам нужно сослаться на пространство имен


using System.Windows.Form;

, а затем добавить код

protected void Button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(" Hi....");

    }
...