0

XML ファイルからテキストと画像データ (html マークアップ内) を Razor ビューに表示する必要があります。たとえば、次の Xml があります。

<newsitems>
    <news id="1">
         <body>
             <p>lorem ipsum <h2>dolor</h2>.</p>
         </body>
    </news>
</newsitems>

次に、その内部 html をビューに表示する必要があります。可能であれば、最良の方法とコードを教えてください! どうも。

4

1 に答える 1

3

Models次のようなビューモデルがある場合は、MVCアプリケーションのディレクトリにビューモデル(よく理解された構造化された方法でデータを表すために使用されるクラスの単なる名前です)を作成します。

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

いくつかのメモ:

  1. あなたがXMLの作成者であるか、そうでなければXMLのソースを信頼していると思います。そうでない場合は、NewsItemViewModel.Bodyプロパティを前処理して、潜在的に危険なHTMLまたはスクリプトを削除し、悪意のあるコンテンツがサイトを壊したり、さらに悪化させたりしないようにすることを検討します。
  2. XMLの各要素のbodyノードでHTMLコンテンツをラップして、HTMLコンテンツがXMLファイルを壊さないようにし、XMLファイルを正常に解析できるようにします。newsCDATA
于 2012-10-25T08:12:46.123 に答える