【问题标题】:Error messages in ASP.NET with jQuery UI带有 jQ​​uery UI 的 ASP.NET 中的错误消息
【发布时间】:2010-06-08 11:00:26
【问题描述】:

我一直在使用我自己的错误报告模块,它结合了简单的 c# 和 jQueryUI 对话框。问题是一旦发生错误或成功,我确实将其值写入会话。它在有 Responce.Redirect 错误的页面上工作得很好,但在我发现错误然后返回相同表单的页面上却不行。

我的问题是为什么添加了 pre-postback 的会话无法加载到我在某些条件下有 return 语句的页面中。

除了会话之外,是否还有其他方法可以保存错误和成功消息?也许是全局变量或类似的东西......

代码示例

这是错误类

public static string getMessage()
{
    HttpContext c = HttpContext.Current;
    string messageType = "";
    if (c.Session["errorMessage"] != null)
    {
        messageType = "errorMessage";
    }
    else if (c.Session["successMessage"] != null)
    {
        messageType = "successMessage";
    }

    if (!string.IsNullOrEmpty(messageType))
    {
        string[] messageBody = c.Session[messageType].ToString().Split('|');
        StringBuilder userMessageSb = new StringBuilder();
        userMessageSb.Append(string.Format("<div id=\"{0}\" title=\"{1}\">{2}</div>", messageType, messageBody[0], messageBody[1]));

        // fix so message will not re-appear
        c.Session.Remove(messageType);

        messageType = userMessageSb.ToString();
    }
    return messageType;
}

public static void setSuccess(string successMessage)
{
    HttpContext.Current.Session["successMessage"] = setMessage("success", successMessage);
}

public static void setError(string errorMessage)
{
    HttpContext.Current.Session["errorMessage"] = setMessage("error", errorMessage);
}

private static string setMessage(string messageTitle, string messageBody)
{
    return string.Format("{0}|{1}", messageTitle, messageBody);
}

我在重定向或返回之前设置了这样的消息

   Errors.setError(my error is");

我的母版页底部出现这样的错误

<%= Errors.getMessage() %>

这是 JS

$(function () {
    $("#errorMessage").dialog("destroy");
    $("#successMessage").dialog("destroy");

    if ($("#errorMessage").length != 0) {
        $("#errorMessage").dialog({
            modal: true,
            height: 300,
            width: 400,
            buttons: {
                Ok: function () {
                    $(this).dialog('close');
                }
            }
        });
    }
    if ($("#successMessage").length != 0) {
        $("#successMessage").dialog({
            modal: true,
            height: 300,
            width: 400,
            buttons: {
                Ok: function () {
                    $(this).dialog('close');
                }
            }
        });
    }
});

【问题讨论】:

  • 你能放一些你写的代码吗?这将有助于更好地理解。

标签: asp.net


【解决方案1】:

如果你没有重定向,&lt;%= Errors.getMessage() %&gt; 有可能在你调用 Errors.setError(my error is") 之前执行。

希望下面的回答有所帮助。

在母版页代码后面创建一个属性

public string MessagePlaceholder
{
  get { return messagePlaceholder.InnerHtml; }
  set { messagePlaceholder.InnerHtml = value; }
}

&lt;%= Errors.getMessage() %&gt; 替换为如下所示的 div 占位符

<div id="messagePlaceholder" runat="server"></div>

这是你的 setError 方法

public static void setError(string errorMessage, bool redirecting)
{
  HttpContext.Current.Session["errorMessage"] = setMessage("error", errorMessage);
  if (!redirecting)
  {
    ((HttpContext.Current.Handler as System.Web.UI.Page).Master as YourMasterPageType).MessagePlaceholder = getMessage();
  }
}

编辑 对不起,我忘了这个

在您的母版页的 Page_Load 事件中

if(!IsPostBack)
{
   messagePlaceholder.InnerHtml = Errors.getMessage();
}

【讨论】:

  • 首先感谢您的时间和精力帮助我,其次有可能避免在 seError 方法中创建第二个参数,因此我不需要在项目中更改此函数?
  • 这一行给出错误 ((HttpContext.Current.Handler as System.Web.UI.Page).Master as MasterPage).MessagePlaceholder = getMessage();
  • 创建public static void setError(string errorMessage, bool redirecting) 作为重载。保持旧的setError 方法不变。这将节省您在重定向的地方更改方法调用。在所有地方,当您不重定向呼叫setError("Message", false); 时,错误是什么?无效的演员表?
  • stackoverflow.com/questions/58123/…。您所说的引发错误的那一行应该可以工作。你能否给出详细的错误,以便我理解问题。
  • 是运行时错误还是编译时错误?您是否在母版页中将 MessagePlaceHolder 定义为公共属性?并且您必须将其转换为您定义的特定母版页类。所以很可能如果您的母版页文件名是 MasterPage.master 那么您的类名应该是 MasterPage 您应该将其转换为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2012-10-18
相关资源
最近更新 更多