簡體   English   中英

從 controller 發送消息以在 asp.net 核心 mvc 中查看的最佳方式

[英]Best way to send message from controller to view in asp.net core mvc

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

我總是從 controller 發送我的消息(成功或失敗消息),以便通過 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>
    }

我想知道將此類消息從 controller 傳遞給查看的標准(最佳和優化)方式。

TempData 適合這種情況嗎? 有沒有更好的方法?

謝謝。

您通常通過“控制器”將“模型”發送到您的“視圖”,這當然是 MVC 所代表的:

public class SendMessageModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    //... More stuff
}

//... inside controller
var model = new SendMessageModel()
{
    Id = 1,
    Name = "Name"
};

return View(model);

//... inside view
@model SendMessageModel


<span>@Model.Id @Model.Name</span>

但有時您需要向視圖發送附加信息。 此數據不一定是 model 的一部分。 對於這種使用 ViewData 的場景是我的選擇。

public async Task<ActionResult> Index(bool? error)
{
    if (error == true)
    {
        ViewData["Message"] = "Some error message";
    }

    //....
    return View();
}

//... inside view
@model SendMessageModel
@{
    var msg = ViewData["Message"];
}

@if(msg != null)
{
    <span class="error">@msg</span>
}

當然,這不是唯一的方式或“最好的方式”。 總有另一種方法可以做到這一點,這就是 Asp.Net Core 或一般編程的美妙之處。

創建一個 model 來表示您將在視圖中顯示的所有數據。

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(模型視圖控制器)與應用程序分層無關。 Model 不需要是業務對象或數據庫表。 請注意,如果不需要額外的值,它可以是業務 object 或數據庫數據,但這不是強制性的。

Model 是一個 object 視圖知道如何在沒有額外解決方法的情況下顯示,model 可以為視圖准備所有需要和可能的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM