Окно сообщений веб-приложения ASP.NET

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

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

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

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

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

13 ответов

Решение

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

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

Аналогично этому вопросу здесь: http://forums.asp.net/t/1461308.aspx/1

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

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");

Просто для записей.

Вот ссылка от 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" установлено значение Compile
  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

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

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

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

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

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

'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);

}

Вот метод, который я только что написал сегодня, чтобы я мог передать на страницу столько окон сообщений, сколько захочу:

/// <summary>
/// Shows a basic MessageBox on the passed in page
/// </summary>
/// <param name="page">The Page object to show the message on</param>
/// <param name="message">The message to show</param>
/// <returns></returns>
public static ShowMessageBox(Page page, string message)
{
    Type cstype = page.GetType();

    // Get a ClientScriptManager reference from the Page class.
    ClientScriptManager cs = page.ClientScript;

    // Find the first unregistered script number
    int ScriptNumber = 0;
    bool ScriptRegistered = false;
    do
    {
        ScriptNumber++;
        ScriptRegistered = cs.IsStartupScriptRegistered(cstype, "PopupScript" + ScriptNumber);
    } while (ScriptRegistered == true);

    //Execute the new script number that we found
    cs.RegisterStartupScript(cstype, "PopupScript" + ScriptNumber, "alert('" + message + "');", true);
}

Как уже отмечали другие, окно сообщения будет на стороне клиента 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, вы можете установить и прочитать cookie с кодом javascript. В любом случае, приятным моментом в этом методе является то, что это простой способ передачи данных с сервера в javascript на клиенте, и что вы можете использовать все функции javascript для выполнения всего, что вам нравится.

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


using System.Windows.Form;

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

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

    }

Если вы включите

System.Windows.forms

как пространство имен, то это будет конфликтовать. использование

btn_click()
{

System.Windows.Forms.MessageBox.Show("Hello");

}

Щелкните правой кнопкой мыши на обозревателе решений и выберите добавление reference.one диалоговое окно появится. На что выберите (.net)-> System.windows.form, импорт System.Windows.Forms (vb) и используя System.windows.forms(C#) скопируйте это в коде и напишите messagebox.show(""),

Просто добавьте пространство имен:

System.Windows.forms 

на ссылку на веб-приложение или что-то еще, и у вас есть доступ к:

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

Я попробовал это, и это сработало.

Удачи.

Другие вопросы по тегам