2014-11-24 42 views
0

我想通過任何現有的字符(/,;)拆分IEnumerable列表的每個項目,我不知道如何處理這個問題。此功能的目的是獲取所有現有的圖,通過額外的字符分割它們,僅在屏幕上顯示唯一的繪圖編號並按適當的方式打勾。目前我的功能只顯示正確的圖表列表,我不知道是否將它們拆分(',')。這是我的函數:使用MVC4拆分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

,你可以做這樣的:

@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> 
} 
+0

感謝您的答覆。我試過了,但是我的輸出只顯示了Plot列的空白空間。我現在有更多的行,但我沒有看到每行上的任何值。 – Eduard 2014-11-24 12:14:58

+0

你在'Plot'屬性中有逗號分隔的地塊?也看到編輯我錯誤地把雙引號'Split()'而不是單一的 – 2014-11-24 12:17:08

+0

我注意到了(「,」)。關於劇情屬性,你是指劇情如何保存?在這種情況下,一個例子是:2,3,7,14,24,46,47,49,64,65。我的其他代碼已經啓動。不知道該怎麼辦。 – Eduard 2014-11-24 12:22:26

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

我沒有測試的代碼,但我的理解,你是在項目獲取值可變的; ,/特殊字符,並且在插入視圖消耗的圖表列表之前,您需要分割。

在這種情況下,當值插入到列表中時應該分割。

這正是上述代碼爲您所做的。

否則,您也可以通過在移動的foreach分裂聲明到您的視圖級別以及再循環....

+0

非常感謝。這正是我需要的。想提一提我用「物品」取代了「測試」並使其工作。 – Eduard 2014-11-24 12:40:12

+0

@eduard你是錯的。糾正! – codebased 2014-11-24 21:39:58

相關問題