Окно сообщений веб-приложения 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
Также представлены варианты, такие как Да и Нет.
Инструкции о том, как получить класс по ссылке, работающей над вашим проектом:
- Если в вашем проекте нет папки App_Code, создайте ее.
- Щелкните правой кнопкой мыши папку App_Code и создайте класс. Назовите это MessageBox.cs
- Скопируйте текст из файла MessageBox.cs ( из прилагаемого кода) и вставьте его в файл MessageBox.cs.
- Сделайте так же, как шаги 2 и 3 для файла MessageBoxCore.cs.
- Важное замечание: Щелкните правой кнопкой мыши каждый файл MessageBox.cs и MessageBoxCore.cs и убедитесь, что для параметра "Build Action" установлено значение Compile
Добавьте этот код на страницу aspx, где вы хотите отобразить окно сообщения:
<asp:Literal ID="PopupBox" runat="server"></asp:Literal>
Добавьте этот код на страницу 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);
Добавьте этот метод на свою страницу 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; }
Добавьте файл 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.
Добавьте эту строку в верхней части страницы aspx:
<%@ Register src="~/MessageBoxUserControl.ascx" tagname="MessageBoxUserControl" tagprefix="uc1" %>
Добавьте эту строку на страницу aspx (внутри тега asp:Content, если он у вас есть)
<uc1:MessageBoxUserControl ID="MessageBoxUserControl1" runat="server" />
Сохраните файлы изображений
1.jpg, 2.jpg, 3.jpg, 4.jpg
из проекта Microsoft выше в ваш~/Images/
дорожка.Готово
Надеюсь, поможет.
Pablo
На самом деле, нет. Серверный код происходит на сервере - вы можете использовать javascript для отображения чего-либо пользователю на стороне клиента, но, очевидно, он будет выполняться только на стороне клиента. Это природа клиент-серверной веб-технологии. Вы в основном отключены от сервера, когда получаете ответ.
Почему бы не использовать jquery popup для этой цели. Я использую bpopup
для этого. Подробнее об этом.
http://dinbror.dk/bpopup/
Есть несколько решений; если вы знакомы с CSS, вот очень гибкое решение:
Создать в соответствующем стиле Panel
что напоминает "Окно сообщений", положить Label
в нем и установить его Visible
собственность на false
, Затем всякий раз, когда пользователю необходимо увидеть сообщение после обратной передачи (например, нажав кнопку), из кода кода установите Label
s 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");
Я попробовал это, и это сработало.
Удачи.