![](/img/trans.png)
[英]ASP.Net Core - How to send message to view from controller without refreshing?
[英]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.