如何在.net框架重定向后的下一页显示状态信息

本文关键字:一页 显示 状态 信息 net 框架 重定向 | 更新日期: 2023-09-27 18:07:20

我正在向我的。net web表单应用程序添加一个表单,我想将用户重定向到另一个页面,但在重定向后显示状态消息,例如'您的文章已成功提交'。

有什么好的方法吗?

我想用会话和用户控件来做,但想看看是否有更简单的方法。

考虑这样的代码:

用户控制代码隐藏:

    public String SessionName { get; set; }
    public String Message
    {
        get
        {
            if (Session[SessionName] == null)
                return String.Empty;
            return Session[SessionName].ToString();
        }
    }
    protected void Page_Unload(object sender, EventArgs e)
    {
        Session[SessionName] = null;
    }

用户控件标记:

<% if (!String.IsNullOrEmpty(Message))
   {%>
        <div>
            <%= Message %>
        </div>
<%} %>

如何在.net框架重定向后的下一页显示状态信息

不,保存在会话中,然后在另一个页面上阅读是一种方法。

如果您的重定向包含目标页面识别并选择正确消息的查询字符串参数,该怎么办?

当试图弄清楚如何通过net6 web应用程序 (Razor Pages在这种情况下)中获得的默认StatusMessage字段时,降落在这篇文章。

我让它工作与会话如上所述。然而,我意识到,在我的情况下,这是完全不必要的:有一个[TempData]属性,你可以坚持一个页面的StatusMessage属性,将其存储在内存中(我猜),并在你阅读后删除它。

因此,您所需要做的就是在调用者页面和接收页面中定义字段,并将其设置在调用者页面上-当您尝试在html端读取它时,接收页面将找到您在调用者上设置的值。下次你再读它的时候,它就已经被删除了(这样你就不会一遍又一遍地显示同样的信息了)。

的例子。

呼叫者页面post call:

public class Create : PageModel
{
    private readonly IMyService _service;
    public Create(IMyService service)
    {
        _service = service;
    }
    [TempData] public string StatusMessage { get; set; } = string.Empty;
    public async Task<IActionResult> OnPostAsync()
    {
        var model = new SomeModel();
        try
        {
            await _service.Create(model);
        }
        catch(Exception e)
        {
            StatusMessage = $"Error: {e.Message}";
            return Page();
        }
        StatusMessage = $"Model created successfully";
        return RedirectToPage("/SomeModels/Index");
    }
}
接收页面:

public class Index : PageModel
{
    [TempData] public string StatusMessage { get; set; } = string.Empty;
    public readonly List<ExerciseCategory> Models;
    public async Task<IActionResult> OnGet()
    {
        var models = await _service.Get();
        Models.AddRange(models);
        return Page();
    }
}