基于XML数据呈现视图

时间:2014-09-15 17:48:44

标签: c# xml asp.net-mvc

在我的ASP MVC应用程序中,我根据XML文件中的数据填充视图中的内容。

我的问题是,我这样做是最好的方式吗?当然,必须有一种更有效,更轻松的方式去做我在这里做的事情。

以下是我的XML文件中的标记示例:

   <?xml version="1.0" encoding="utf-8" ?>
<Content>
  <!-- P1: Customer details -->


  <ContentItem>
    <key>Header_CancelImg</key>
    <value>~/Content/mainpage/images/close.gif</value>
  </ContentItem>

  <ContentItem>
    <key>Header_CancelText</key>
    <value>Cancel this application</value>
  </ContentItem>

所以,我正在反序列化这个XML文件的内容,如下所示:

 using (MemoryStream ms = new MemoryStream(System.IO.File.ReadAllBytes(path)))  {
     XmlSerializer serializer = new XmlSerializer(typeof(Content));
     pageContent = serializer.Deserialize(ms) as Content;
 }

一切都好。现在,基于此,我可以根据这些内容填充视图的最佳方式是什么?让我告诉你我的意思,以及我现在如何做(非常可怕):

@model <project.Models.Content> // This content object contains Content object where the deserializer is present as shown above

@foreach (var contentItem in Model.Item2.contentItemList)
{
    @if(contentItem.key == "Header_CancelImg")
    {
        <img src="@Url.Content(contentItem.value)">
        continue;
    }
    @if(contentItem.key == "Header_CancelText")
    {
        <p>@contentItem.value</p>
        continue;
     }
} // and so on

我能做到这一点更简单吗? 感谢

1 个答案:

答案 0 :(得分:2)

如果您为Content类提供了默认属性,则可以通过引用键名来访问模型中的数据,而无需迭代所有不同的可能键。我已经展示了一个私有字典属性,它在第一次打击时被懒惰地初始化。

public class Content
{
    private Dictionary<string, string> contentItems;

    public string this[string key]
    {
        if (contentItems == null)
        {
            contentItems = contentItemList.ToDictionary(i => i.Key, i => i.Value);
        }
        if (contentItems.ContainsKey(key))
        {
            return contentItems[key];
        }
        return string.Empty;
    }

    //other properties
}

然后你的剃刀代码可能是这样的:

@model project.Models.Content

<img src="@Url.Content(Model["Header_CancelImg"])">
<p>@Model["Header_CancelText"]</p>