带有jQuery UI的ASP.NET中的错误消息

带有jQuery UI的ASP.NET中的错误消息,asp.net,Asp.net,我一直在使用我自己的错误报告模块,它是简单c#和jQueryUI对话框的组合。问题是,一旦发生错误或成功,我会将其值写入会话。它在有response.Redirect-on-error的页面上运行得非常好,但在我捕获错误然后返回到相同表单的页面上则不行 我的问题是,在某些条件下,为什么添加了预回发的会话无法加载到有return语句的页面中 除了在会话中,是否还有其他方法保存错误和成功消息?也许是全局变量或类似的东西 代码示例 这是错误类 public static string getMessa

我一直在使用我自己的错误报告模块,它是简单c#和jQueryUI对话框的组合。问题是,一旦发生错误或成功,我会将其值写入会话。它在有response.Redirect-on-error的页面上运行得非常好,但在我捕获错误然后返回到相同表单的页面上则不行

我的问题是,在某些条件下,为什么添加了预回发的会话无法加载到有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.getMessage() %>

在调用
Errors.setError(我的错误是“
)之前,可能会执行
,以防您不重定向

希望下面的答案有帮助

在母版页代码隐藏中创建属性

public string MessagePlaceholder
{
  get { return messagePlaceholder.InnerHtml; }
  set { messagePlaceholder.InnerHtml = value; }
}
更换为div-placeholder,如下所示

<div id="messagePlaceholder" runat="server"></div>
编辑 对不起,我忘了这个

母版页的页面加载事件

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

你能把你写的一些代码放进去吗?这将有助于更好地理解。首先,感谢你花时间和精力帮助我,其次,是否有可能避免在seError方法中创建第二个参数,这样我就不需要在整个项目中更改此函数?这行给出了错误信息((HttpContext.Current.Handler作为System.Web.UI.Page)。Master作为MasterPage)。MessagePlaceholder=getMessage();Create
public static void setError(string errorMessage,bool重定向)
作为重载。保持旧的
setError
方法不变。这将节省您在重定向位置更改方法调用的时间。在不重定向的所有位置,调用
setError(“消息”,false)
错误是什么?无效的强制转换?请参阅。您所说的引发错误的那一行应该有效。您能给出详细的错误以便我理解问题吗。这是运行时错误还是编译时错误?您是否在母版页中将MessagePlaceHolder定义为公共属性?您必须将其强制转换到特定母版页类。因此,如果母版页文件名为MasterPage.master,则类名应该是母版页,您应该将其强制转换到该母版页。
<div id="messagePlaceholder" runat="server"></div>
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();
  }
}
if(!IsPostBack)
{
   messagePlaceholder.InnerHtml = Errors.getMessage();
}