使用MVC4拆分IEnumerable列表的每个元素

时间:2014-11-24 11:09:29

标签: c# asp.net-mvc-4

我试图通过任何现有的字符(/ ,;)拆分IEnumerable列表的每个项目,我不知道如何解决这个问题。此功能的目的是获取所有现有的图,通过额外的字符分割它们,仅在屏幕上显示唯一的图表编号并勾选为适当的。目前我的功能只显示正确的图表列表,我不确定是否拆分(',')。这是我的功能:

public ActionResult CopyPlotsCSR(int id)
    {
        var CSR = db.CSRs.Find(id);
        Quote oldQuote = CSR.OrderOld.Quote;
        var qp = db.QuoteProducts.Where(q => q.QuoteID == oldQuote.ID && q.Revision == oldQuote.Revision && q.Plot != null).OrderBy(q => q.Plot);
        var plots = qp.Select(j => j.Plot).Distinct();
        List<PlotSelector> Plots = new List<PlotSelector>();
        foreach (var item in plots)
        {
            Plots.Add(new PlotSelector() { Plot = item });
        }
        ViewBag.CSRID = id;
        return View(Plots.ToList());
    }

这是我的模特:

public class PlotSelector
{
    public PlotSelector() { this.Select = false; }

    public PlotSelector(QuoteProduct qp)
    {
        this.QuoteProduct = qp;
        this.QuoteProductID = qp.ID;
        this.Plot = qp.Plot;
        this.Select = false;
    }

    public virtual QuoteProduct QuoteProduct { get; set; }
    public long QuoteProductID { get; set; }
    public string Plot { get; set; }
    public bool Select { get; set; }
}

}

这是我的观点:

@model IEnumerable<ERP.ViewModels.PlotSelector>

@{
ViewBag.Title = "Quote";
ViewBag.SubTitle = "Create";
}

<h2>Create New Quote based on Plots</h2>

@Html.ActionImage("Edit", "CSR", new { id = ViewBag.CSRID }, "~/Content/Images/BackToCSR.png", "Back To CSR")

<table>
    <tr>
        <th>
            Confirm
        </th>
        <th>
            Plot
        </th>
    </tr>
    @Html.EditorForModel()
</table>

这是我的EditorForModel()视图:

@model ERP.ViewModels.PlotSelector
<tr>
    <td>
        @Html.EditorFor(i => i.Select)
        @Html.HiddenFor(i => i.QuoteProductID)
    </td>
    <td>
        @Html.DisplayFor(i => i.Plot)
    </td>
</tr>

这是我目前的输出:

[CheckBox]   586, 587, 588, 589
[CheckBox]   21, 22, 25
[CheckBox]   3, 65, 68
[CheckBox]   21, 68, 586

我需要一个如下输出:

[CheckBox]   3
[CheckBox]   21
[CheckBox]   22
[CheckBox]   25
[CheckBox]   65
[CheckBox]   68
[CheckBox]   586
[CheckBox]   587
[CheckBox]   588
[CheckBox]   589

非常感谢任何帮助/提示。感谢。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

@model ERP.ViewModels.PlotSelector

@{
   var temp = Model.Plot.Split(',');

}

@foreach(var item in temp)
{
<tr>
    <td>
        @Html.EditorFor(i => i.Select)
        @Html.HiddenFor(i => i.QuoteProductID)
    </td>
    <td>
        @Html.Display(item)
    </td>
</tr>
}

答案 1 :(得分:0)

我认为这就是你所需要的:

foreach (var item in plots)
        {
      var subplots = item.Split(new char[] { ';', ',' , '/'}, StringSplitOptions.RemoveEmptyEntries);
        foreach(var sub in subplots) {

                Plots.Add(new PlotSelector() { Plot = sub });
        }
        }

我没有测试过代码,但我了解到你在item变量中得到了值; ,/特殊字符,您可能希望在插入到图表列表中之前拆分视图消耗。

在这种情况下,您应该在将值插入列表时进行拆分。

这正是上面的代码为你做的。

否则,您也可以将split语句移动到视图级别,然后在foreach中循环播放....