首页 > 解决方案 > 从控制器发送消息以在 asp.net core mvc 中查看的最佳方式

问题描述

我正在使用 asp.net core mvc(最新版本)。

我总是将我的消息(成功或失败消息)从控制器发送到 TempData 查看,如下所示:

TempData["msg"] = "Operation was successful";

并在视图中向用户显示此消息:

@if (TempData["msg"] != null)
    {
        string msg = (string)TempData["msg"];
        <script>
            UIkit.notification({ message: '@msg', status: 'primary', pos: 'bottom-center', timeout: 15000 });
        </script>
    }

我想知道将此类消息从控制器传递到视图的标准(最佳和优化)方式。

TempData 适合这种情况吗?有没有更好的方法?

谢谢。

标签: c#asp.net

解决方案


创建一个模型来表示您将在视图中显示的所有数据。

public class NewInvoiceViewData
{
    public Invoice Invoice { get; set; }
    public string Message { get; set; }
    public bool HasMessage => string.IsNullOrEmpty(Message) == false;
}

public async Task<ActionResult> CreateInvoice(NewInvoiceParameters parameters)
{
    var invoice = createInvoice.From(parameters);
    var message = invoice == null ? "Something gone wrong" : "Success";
    
    var viewData = new NewInvoiceViewData
    {
        Invoice = invoice,
        Message = message
    }

    return View(viewData);
}

在视图中

@if (@data.HasMessage)
{
    <script>
        UIkit.notification({ message: '@data.Message', status: 'primary', pos: 'bottom-center', timeout: 15000 });
    </script>
}

MVC(模型视图控制器)与应用程序分层无关。模型不需要是业务对象或数据库表。请注意,如果不需要额外的值,它可以是业务对象或数据库数据,但这不是强制性的。

模型是一个对象,视图知道如何在没有额外解决方法的情况下显示,模型可以为视图准备所有需要和可能的数据。


推荐阅读