c# - 如何将列表字符串传递给 TempData Asp.Net

标签 c# asp.net asp.net-mvc

我有一个 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>
}

但出现错误 enter image description here

最佳答案

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/

相关文章:

c# - 两个属性具有相同的功能,只使用一种远程验证方法

具有 SQL Server 数据库连接的 ASP.Net 网络服务

c# - 在使用 MasterPage 的网络表单上使用 CSS

c# - 检查 Razor 页面中的登录用户角色

c# - 在 C# 中将证书链添加到 PKCS#7/CMS 容器

c# - 将非通用集合转换为通用集合的最佳方法

c# - 在 ActionResult 中使用 ToList ForEach 更新表值

asp.net-mvc - 使用 ASP.Net MVC 从数据库中检索和显示图像

asp.net - 您将如何使用 asp.net mvc 创建用户数据库

c# - 防止滚动前 n 行