【问题标题】:Return status message to a page after posting in ASP.NET在 ASP.NET 中发布后将状态消息返回到页面
【发布时间】:2014-08-11 07:52:36
【问题描述】:

我对 ASP.Net 还很陌生,但以前使用过 ASP Classic。

我试图弄清楚如何从“代码隐藏”页面向我的前端页面返回状态消息。

public partial class test: System.Web.UI.Page
{
    private String msg;
    protected void Page_Load(object sender, EventArgs e)
    {
        status.Text = msg;
    }

    protected void action(object sender, EventArgs e)
    {
        msg = "Hello world!";
    }
}

当我的页面发布到自身时,我无法在前端页面的状态标签中看到我期望的消息。

我猜这是因为 Page_Load 函数在执行我的操作或类似操作之前执行。

我希望很清楚我想要实现的目标,谁能指出我正确的方向?

【问题讨论】:

  • 您是否已将按钮单击事件(或类似事件)与您的方法挂钩?需要更多信息,你是如何触发回帖的?你怎么调用action(object sender, EventArgs e)?
  • 一些风格上的东西,我相信重写 OnLoad/OnPreRender 方法比使用事件更有效。这是个人的事情,但是如果您查看两个连线事件的堆栈跟踪,您的页面就会有更多的障碍可以跳过。 “动作”也是一种方法,因此应该大写。与“测试”相同页面是类,因此应大写。

标签: c# asp.net webforms


【解决方案1】:

将您的文本设置为OnPreRender 而不是 OnLoad。它在事件发生后触发,应该用来做尽可能多的 UI。

public partial class test: System.Web.UI.Page
{
    private String msg;
    protected void OnPreRender(object sender, EventArgs e)
    {
        status.Text = msg;
    }

    protected void action(object sender, EventArgs e)
    {
        msg = "Hello world!";
    }
}

通常,如果您正在运行一些事件,这是最好的方法 - 您不知道事件将按什么顺序触发,因此您希望将消息设置在最后。但是,除非您需要做任何更复杂的事情,否则为什么不在事件本身中设置它并摆脱私有变量和额外的方法调用?

public partial class test: System.Web.UI.Page
{
    protected void action(object sender, EventArgs e)
    {
        status.Text = "Hello world!";
    }
}

【讨论】:

    【解决方案2】:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!isPostBack)
        {
        status.Text = "First time on page";
        }
    }
    
    protected void action(object sender, EventArgs e)
    {
        status.Text = "Hello world!";
    }
    

    【讨论】:

    • 感谢您添加此内容,它说明了我试图解释的原因,即您有时可能会尝试保留 Page_Load 和 Action 方法,而不是仅在方法本身中进行更新。
    【解决方案3】:

    假设您有按钮或任何其他会导致回发并触发 action 功能的控件,您可以使用 Session 来实现此目的。

    public partial class test: System.Web.UI.Page
    {
       private String msg;
    
       protected void Page_Load(object sender, EventArgs e)
       {
           if (!IsPostback)
           {
              Session["Message"] = null;
           }
           else
           {
              status.Text = Session["message"].ToString();
           }
       }
    
       protected void action(object sender, EventArgs e)
       {
           msg = "Hello world!";
           Session["message"] = msg;
       }
    }
    

    【讨论】:

    • 我不喜欢这种方法 1)它使用会话没有任何好处 2)它需要用户重新加载页面才能调用 OnLoad 事件,因此不能真正解决用户的问题
    • 你好,我做了一点小改进。但是,我相信你也可以通过使用 javascript 来实现你想要的。
    【解决方案4】:
    protected void action(object sender, EventArgs e)
    {
        Response.Write("<script type=\"text/javascript\">alert('Your Message');</script>");
    }
    

    【讨论】:

    • 纯代码的答案通常不是很有帮助,您不应该发布无论如何都不起作用的代码。
    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多