Tur*_*rbo 5 asp.net asp.net-mvc asp.net-core-mvc asp.net-core visual-studio-2017
我正在使用Post-Redirect-Get模式。在我的 asp.net core MVC Web 应用程序中,会发生以下情况:
在上面的步骤 3 中,我想向用户显示一条消息“项目已成功添加”。
这是我的代码(没有成功消息):
public async Task<IActionResult> Index(string id)
{
ItemView itemView = null;
if (string.IsNullOrEmpty(id))
itemView = new ItemView(); // Create an empty item.
else
itemView = await itemService.GetItemAsync(id);
return View(itemView);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Index(ItemView itemView)
{
string id = await itemService.AddItemAsync(itemView);
return RedirectToAction("Index", "Home", new { id = id });
}
Run Code Online (Sandbox Code Playgroud)
我在 stackoverflow 上的其他答案中找到了几种方法可以做到这一点。
“史努比”的原始答案确实为我指明了正确的方向。但由于某种未知的原因,该答案不再存在,因此我自己发布答案,希望它对将来的人有益。
ASP .NET Core 1.1 及更高版本支持基于 Cookie 的 Tempdata 提供程序(称为 CookieTempDataProvider)。链接到Microsoft 文档。
这与基于 Session 的 Tempdata 类似,但服务器端不存储任何数据。服务器的响应设置为浏览器中的 cookie,其中包含您要存储的数据。来自浏览器的下一个请求将包含此 cookie。框架会自动解析它并将其填充到控制器可以使用的 TempData 中。一旦控制器读取此数据,CookieTempDataProvider 就会自动在响应中添加适当的标头以清除此 cookie。
在你的Startup类的ConfigureServices方法中,你需要注册CookieTempDataProvider:
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
Run Code Online (Sandbox Code Playgroud)
要将一些数据存储在基于 cookie 的临时数据中,您只需在控制器中设置如下值:
TempData["key"] = "value";
Run Code Online (Sandbox Code Playgroud)
要读取控制器中的数据,您可以这样读取:
string value = TempData["key"];
if (value != null)
{
// Do something with the the value.
}
Run Code Online (Sandbox Code Playgroud)
对非空值的检查会告诉您该键是否存在于 TempData 中。请注意,您还可以使用 .ContainsKey() 方法进行检查,但这不计为读取。除非您阅读,否则数据(和 cookie)不会被清除。例如,这不会清除数据:
if (TempData.ContainsKey("key"))
{
// Do something without actually reading the value of TempData["key"].
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1870 次 |
最近记录: |