如何在razor中循环遍历xml字符串

时间:2013-06-12 20:18:23

标签: c# asp.net-mvc razor

我有一个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中显示的组合框生成选项列表,我试图在razor中循环遍历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>

1 个答案:

答案 0 :(得分:1)

为了完整,这是我最后在剃须刀中所做的事情,谢谢你。我在控制器端封装了输出xml字符串,然后将其插入到ComboData结构中,当数据太大时,显然razor遇到了纯字符串问题。

控制器:

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>