2013-06-12 76 views
0

XML字符串循環我有一個XML字符串看起來像這樣如何通過剃刀

<row Name="analog.__VG_SPP3_SFRTPCT" /> 
<row Name="analog._3305_LIST210_1" /> 
<row Name="analog._AG_5340_PR14AN" /> 
<row Name="analog._AG_EPNT_2" /> 
<row Name="analog._AG_EPNT_SP" /> 
<row Name="analog._AG_MERC_ERXTES" /> 
<row Name="analog._AG_ROC_TEST" /> 
<row Name="analog._AG_ROM1_LOAD" /> 
<row Name="analog._AG_TEST_CRC1LT" /> 
<row Name="analog._AG_TEST_CRC1RT" /> 
<row Name="analog._CWAV_TST_MDP1CV" /> 
<row Name="analog._CWAV_TST_MDP1CV_LIST" /> 

試圖生成在JavaScript中顯示的組合框中選擇一個選項列表,我通過XML字符串試圖循環在剃刀中生成它,但是我不太確定如何或如果它甚至可能,我可以通過將xml分割成單獨的數據結構,然後再次在剃鬚刀中循環遍歷該數據結構來完成此操作。但是出於性能方面的考慮,一次能夠做到這一點很好。

@model string 
@{ 
    Response.ContentType = "text/xml"; 
    Layout = null; 
} 
<complete> 
    <option value=""><![CDATA[&nbsp;]]></option> 
    @foreach (var row in @Model) 
    { 
     <option value="@(row.Name)">@(row.Name)</option> 
    } 
</complete> 
+0

我不知道,但你可以阿賈克斯回控制器嗎? – Jonesopolis

+0

我想我可能會在控制器中做到這一點,只是讓剃刀將字符串一直傳回給javascript方面的ajax調用方。 – aggaton

+0

您可以將控制器更改爲IEnumerable ,其中每個條目都是一行,而不是單個字符串中的所有行。 –

回答

1

爲了完整性,這裏是我最終在剃刀上做的事情,謝謝餡餅。我在控制器端封裝了輸出xml字符串,然後將它插入ComboData結構中,當數據太大時,顯然剃鬚刀對純字符串有問題。

控制器:

var Names = "<rows>" + oService.Names(ID) + "</rows>"; 
var oComboData = new ComboData(Names); 
return View("ComboData", oComboData); 

視圖模型:

public class ComboData 
{ 
    public ComboData(string sString) 
    { 
     xdoc = new XmlDocument(); 
     xdoc.LoadXml(sString); 
    } 

    public XmlDocument xdoc { get; set; } 
} 

觀點:

@using System.Xml 
@using ViewModels; 
@model ComboData 
@{ 
    Response.ContentType = "text/xml"; 
    Layout = null; 
} 
<complete> 
    <option value=""><![CDATA[&nbsp;]]></option> 
    @foreach (XmlNode node in Model.xdoc.DocumentElement.ChildNodes) 
    { 
     <option value="@(node.Attributes[0].Value)">@(node.Attributes[0].Value)</option> 
    } 
</complete>