我試圖在我的HTML中使用循環顯示List<string>
。我得到以下輸出:使用循環在HTML(MVC)中顯示列表字符串
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'已經是一個字符串列表,所以不需要在循環中再次將它轉換爲字符串。 –
看到這個 - http://stackoverflow.com/questions/17469697/liststring-passed-in-viewbag-gets-spoiled-with-system-collections-generic-lis。它似乎也許'Convert.ToString()''造成了所有問題。 – Leron
你說「model.FailedProductIdsList = _importFromCalculationSheet.FailedToUpdateIds;」中沒有錯誤我懷疑這是問題所在。但是,您可以檢查清單分配給的實際類型。也可以嘗試_importFromCalculationSheet.FailedToUpdateIds.ToList(); – Spock