Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将列表字符串传递到TempData Asp.Net_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 如何将列表字符串传递到TempData Asp.Net

C# 如何将列表字符串传递到TempData Asp.Net,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个Tempada来显示msg错误中的错误列表,我创建了一个列表,在我的foreach中,每个错误都找到它,我在列表中添加一个错误,然后在TempData中显示这个列表 public IActionResult Demo() { List<string> LogErros = new List<string>(); try { foreach (var item in somethings) {

我有一个Tempada来显示msg错误中的错误列表,我创建了一个列表,在我的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();
}
public IActionResult Demo()
{
List LogErros=新列表();
尝试
{      
foreach(某些事物中的var项)
{
//如果有错误,请添加到列表中
LogErros.add();
}
如果(LogErros.Count>0)
{
TempData[“错误消息”]=LogErros;
}
}
返回视图();
}
我试试这个:

@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>
}
@if(TempData[“错误消息”]!=null)
{
x
@TempData[“错误消息”]
}
但是得到错误

TempData[“错误消息”]
将字符串列表存储为
对象。所以你需要先得到它,将它转换成一个字符串列表,循环遍历每一个字符串并渲染它

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>
}
现在,在视图或布局中,可以通过使用带有
messages
属性的div元素来调用此标记帮助器

<div messages></div>

请随时更新标记帮助程序代码,以呈现消息所需的HTML标记


对于非Asp.Net核心项目,您可以创建一个html帮助程序方法,该方法也可以执行相同的操作。

问题是您正在视图中显示
@TempData[“错误消息”]
,但
TempData
是,这意味着当您访问该键上的值时,该值是一个对象

即使您强制转换为其实际值(
列表
),它也会隐式调用
.ToString()
,如果您只使用
@
符号在页面上渲染,它不会自动显示列表的内容

您需要做的第一件事是将对象强制转换到
列表中:

var errorMessageList=TempData[“错误消息”]作为列表;
然后可以迭代列表中的值:

var errorMessageList = TempData["error-message"] as List<string>;
@if (errorMessageList != null)
{
    <div class="alert alert-danger alert-dismissable">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">x</button>
        @foreach(var message in errorMessageList)
        {
            @message
        }
    </div>
}
var errorMessageList=TempData[“错误消息”]作为列表;
@如果(errorMessageList!=null)
{
x
@foreach(errorMessageList中的var消息)
{
@信息
}
}

当然,你必须按照你想要的格式,也许应该用逗号分隔?也许应该在他们自己的
。。。这取决于您。

您应该向我们展示显示此信息的代码。我想你的问题是因为对列表中的
.ToString()
的调用不会显示列表中的所有项目,它会显示
System.Collections.Generic.List1[System.String]
像你的图像所显示的那样shum:)不理解你的建议。你怎么知道OP使用的是ASP.Net Core?Thx对于你和maccettura来说,也许不是更好的方式,但是对于我现在所需要的来说,它工作得很好,@可以为遗留MVC和net创建CodeNotFound扩展方法core@JasonRonerTagHelper功能仅适用于ASP.Net核心而不适用于ASP.Net MVC,因此扩展方法在这里没有太大帮助。CodeNotFound,可能是因为IActionResult heheh
<div messages></div>
var errorMessageList = TempData["error-message"] as List<string>;
var errorMessageList = TempData["error-message"] as List<string>;
@if (errorMessageList != null)
{
    <div class="alert alert-danger alert-dismissable">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">x</button>
        @foreach(var message in errorMessageList)
        {
            @message
        }
    </div>
}