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>デバッグ時に:に値が 1 つしか挿入されてい"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>が入力され、リストは my に入力されます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]

一度に 1 つのアイテムのみを取得し、List<string>それを文字列に変換する場合は? ビューでこの問題をより適切にデバッグする方法はありますか?(ビューのブレークポイントはヒットしません)

4

2 に答える 2

4

foreach を使用します。

FailedProductIdsListすでに文字列のリストであるため、文字列に変換する必要はありません。

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

編集:

コントローラーを次のように単純化します。

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

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

それはリストを印刷しますか?

于 2013-10-08T09:58:59.330 に答える