我有一个 Tempada 来显示消息错误中的错误列表,我创建一个列表并在我的 foreach 中,每个错误找到它,我在列表中添加一个错误,稍后我在 TempData 中显示此列表
public IActionResult Demo()
{
List<string> LogErros = new List<string>();
try
{
foreach (var item in somethings)
{
// if have some error add to list
LogErros.add();
}
if (LogErros.Count > 0)
{
TempData["error-message"] = LogErros;
}
}
return View();
}
我试试这个:
@if (TempData["error-message"] != null)
{
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">x</button>
@TempData["error-message"]
</div>
}
最佳答案
TempData["error-message"]
将字符串列表存储为 Object
。因此,您需要首先获取它,将其转换为字符串列表,循环遍历每个字符串并渲染它。
Razor 基本上会调用表达式上的 ToString
(在您的情况下为 object
),因此您会看到当前的结果
这应该有效
@if (TempData["error-message"] != null)
{
var errors = TempData["error-message"] as List<string>;
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" >x</button>
@foreach(var errorMessage in errors)
{
<p>@errorMessage</p>
}
</div>
}
虽然这有效,但我建议不要在 View 中放置大量 C# 代码。如果它是一个 asp.net core 项目,我建议为此创建一个标签助手。这是一个非常简单的。
[HtmlTargetElement("div", Attributes = "messages")]
public class AlertMessagesTagHelper : TagHelper
{
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
StringBuilder str = new StringBuilder();
var messages = ViewContext.TempData["error-message"] as List<string>;
if (messages != null && messages.Any())
{
str.Append("<div class='alert alert-danger alert-dismissable'>");
foreach (var message in messages)
{
str.AppendFormat("<div>{0}</div>", message);
}
str.Append("</div>");
}
output.Content.AppendHtml(str.ToString());
}
}
现在,在您的 _ViewImports.cshtml
文件中,使用 addTagHelper
方法包含项目中的所有标记助手
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, YourAssemblyName
现在,在您的 View 或布局中,您可以使用带有 messages
属性的 div 元素来调用此标记助手
<div messages></div>
请随意更新标记帮助程序代码以呈现您想要的消息 HTML 标记。
对于非 Asp.Net 核心项目,您可以创建一个 html 帮助器方法来执行相同的操作。
关于c# - 如何将列表字符串传递给 TempData Asp.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50029864/