我需要从 XML 文件将一些文本和图像数据(在 html 标记中)显示到 Razor 视图中。例如,我有以下 XML:
<newsitems>
<news id="1">
<body>
<p>lorem ipsum <h2>dolor</h2>.</p>
</body>
</news>
</newsitems>
然后我需要将该内部 html 显示到视图中。如果可能的话,请告诉我最好的方法和代码!谢谢。
我需要从 XML 文件将一些文本和图像数据(在 html 标记中)显示到 Razor 视图中。例如,我有以下 XML:
<newsitems>
<news id="1">
<body>
<p>lorem ipsum <h2>dolor</h2>.</p>
</body>
</news>
</newsitems>
然后我需要将该内部 html 显示到视图中。如果可能的话,请告诉我最好的方法和代码!谢谢。
如果有的话,在 MVC 应用程序的目录中创建一个视图模型(这只是用于以易于理解的结构化方式表示数据的类的一个花哨名称)Models
,例如:
public class NewsItemViewModel
{
public int Id { get; set; }
public string Body { get; set; }
}
在您的控制器中创建一个操作以NewsItemViewModel
从 XML 中提取实例。我会使用 LINQ-to-XML。假设您的目录中有一个名为的NewsController
控制器Controllers
。
public class NewsController : Controller
{
public ActionResult Index()
{
// replace XElement.Parse(...) below to your own routine to load the XML file
var newsItems = (from news in XElement.Parse(@"<newsitems>
<news id=""1"">
<body>
<p>lorem ipsum <h2>dolor</h2>.</p>
</body>
</news>
</newsitems>").Descendants("news")
let body = news.Descendants("body").First()
select new NewsItemViewModel {Id = (int)news.Attribute("id"), Body = body.Value });
return View(newsItems);
}
}
NewsController.Index
现在为(按照我的示例,那就是)创建一个视图Views/News/Index.cshtml
。
@model IEnumerable<YourApplicationNameSpace.Models.NewsItemViewModel>
@foreach(var newsItem in Model)
{
<div class="newsitem">
@Html.Raw(newsItem.Body)
</div>
}
几点注意事项:
NewsItemViewModel.Body
属性以去除潜在危险的 HTML 或脚本,以防止恶意内容破坏您的网站或更糟。body
每个news
元素的节点中,CDATA
以便 HTML 内容不会破坏您的 XML 文件,从而能够成功解析它。