4

我正在尝试List<string>使用循环在我的 HTML 中显示 a 。我得到以下输出:

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>
}

对于循环:

<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" 因此甚至不需要转换为字符串,但我这样做只是为了确定,因为不转换时结果是相同的。

我正在使用的模型:在usingImportCalculationSheetModel中引用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>甚至将其转换为字符串时?有没有办法在视图中更好地调试这个问题?(视图中的断点未命中)

4

2 回答 2

4

Use the foreach:

No need to convert to string as FailedProductIdsList is already a list of strings.

<ul>
   @foreach(var productId in Model.FailedProductIdsList)
   {
      <li><b>@productId</b></li>
   }
</ul>

EDIT:

Simplify your controller to:

[HttpPost]
public ActionResult ImportCalculationSheet(ImportCalculationSheetModel model)
{
    var m = new ImportCalculationSheetModel { 
        FailedProductIdsList = new List<string> { "test1", "test2", "test3" } 
    };

    if (ModelState.IsValid)
    {
        return View("ViewName", m);
    }
}

does that print the list?

于 2013-10-08T09:58:59.330 回答
1

我发现并解决了问题:

我正在重定向到我的代码中的一个操作,这是我不应该做的,因为模型将被清除。

因此,而不是以下代码:

if (model.FailedProductIdsList.Count > 0)
{
   return RedirectToAction("ImportCalculationSheetSucceededWithFailures", model);
}

我现在使用以下代码:

if (model.FailedProductIdsList.Count > 0)
{
   return View("Nop.Plugin.Misc.ExportAttributes.Views.MiscExportAttributes.ImportCalculationSheetSucceededWithFailures", model);
}

不同之处在于我没有调用创建新的干净模型的其他方法,而是以这种方式将模型直接发送到视图。

于 2013-10-17T06:39:43.180 回答