我试图通过任何现有的字符(/ ,;)拆分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
非常感谢任何帮助/提示。感谢。
答案 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中循环播放....