【发布时间】:2013-10-08 09:51:57
【问题描述】:
我正在尝试使用循环在我的 HTML 中显示 List<string>。我得到以下输出:
System.Collections.Generic.List`1[System.String]
我以前见过这个,但不是我目前编码的方式:
我尝试了 2 个循环来显示 List<string> 中的值,但它们都返回相同的上述结果:
HTML
@{
Layout = "~/Administration/Views/Shared/_AdminLayout.cshtml";
}
@using Telerik.Web.Mvc.UI
@using Nop.Plugin.Misc.ExportAttributes.Models;
@model ImportCalculationSheetModel
@using Nop.Web.Framework;
@using (Html.BeginForm())
{
<ul>
@for (int i = 0; i < Model.FailedProductIdsList.Count; i++)
{
<li><b>@Convert.ToString(Model.FailedProductIdsList[i])</b></li>
}
</ul>
}
For循环:
<ul>
@for (int i = 0; i < Model.FailedProductIdsList.Count; i++)
{
<li><b>@Convert.ToString(Model.FailedProductIdsList[i])</b></li>
}
</ul>
Foreach 循环:
<ul>
@foreach(var productId in Model.FailedProductIdsList)
{
<li><b>@Convert.ToString(productId);</b></li>
}
</ul>
调试时我看到List<string>中只插入了一个值:"99999"
所以它甚至不需要转换为字符串,但我这样做只是为了确定,因为不转换时结果是一样的。
我正在使用的模型:ImportCalculationSheetModel 在 View 中使用 @model ImportCalculationSheetModel 引用
型号
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Nop.Web.Framework;
using Nop.Web.Framework.Mvc;
namespace Nop.Plugin.Misc.ExportAttributes.Models
{
public class ImportCalculationSheetModel : BaseNopModel
{
public List<string> FailedProductIdsList { get; set; }
}
}
所以我的模型只填充了 1 个List<string>,列表中填充了我的Controller。
控制器
[HttpGet]
public ActionResult ImportCalculationSheetSucceededWithFailures(ImportCalculationSheetModel model)
{
return View("Nop.Plugin.Misc.ExportAttributes.Views.MiscExportAttributes.ImportCalculationSheetSucceededWithFailures", model);
}
[HttpPost]
public ActionResult ImportCalculationSheet(ImportCalculationSheetModel model)
{
if (ModelState.IsValid)
{
ImportFromCalculationSheet _importFromCalculationSheet = new ImportFromCalculationSheet();
var file = Request.Files["importexcelfile"];
if (file != null && file.ContentLength > 0)
{
_importFromCalculationSheet.ImportProductsFromXlsx(file.InputStream);
model.FailedProductIdsList = _importFromCalculationSheet.FailedToUpdateIds;
}
else
{
return RedirectToAction("ImportCalculationSheet", model);
}
if (model.FailedProductIdsList.Count > 0)
{
return RedirectToAction("ImportCalculationSheetSucceededWithFailures", model);
}
else
{
return RedirectToAction("ImportCalculationSheetSucceeded", model);
}
}
else
{
return RedirectToAction("ImportCalculationSheet", model);
}
}
FailedProductIdsList 在以下行填充:
model.FailedProductIdsList = _importFromCalculationSheet.FailedToUpdateIds;
我可以看到它在调试时不会失败。
问题
for循环和foreach循环为什么会返回:
System.Collections.Generic.List`1[System.String]
当我一次只抓取List<string> 中的一项甚至将其转换为字符串时?有没有办法在视图中更好地调试这个问题?(视图中的断点没有命中)
【问题讨论】:
-
FailedProductIdsList已经是一个字符串列表,因此无需在循环内再次将其转换为字符串。 -
看到这个 - stackoverflow.com/questions/17469697/… 。看来可能是 `Convert.ToString()` 导致了所有问题。
-
您说“model.FailedProductIdsList = _importFromCalculationSheet.FailedToUpdateIds;”中没有错误我怀疑这是问题所在。但是,您能否检查一下分配给列表的实际类型。也尝试做 _importFromCalculationSheet.FailedToUpdateIds.ToList();
-
@Raj 我已经检查过了,但它给了我相同的结果。
-
你说断点没有命中视图页面。也许您正在引用该页面的旧版本?我建议关闭 VS 并删除所有 ASP.NET 临时文件并重新启动应用程序。如果这不能解决问题,请尝试在示例 MVC 应用程序中复制您的问题。确保您具有相同的设置,除了任何其他附加依赖项。祝你好运。
标签: c# html asp.net-mvc razor