2017-09-25 13 views
0

現在、私たちはクライアントに送信するXML CSSフィードを作成するために多少の処理を行うビューを持っています。ビューからコントローラへの処理の移動

@foreach (Models.BVModels cat in ViewBag.BVSubCategories) 
{ 
    <Category> 
     @if (!string.IsNullOrEmpty(cat.LinkName)) 
     { 
      <ExternalId>(cat.LinkName)</ExternalId> 
     } 
     else 
     { 
      <ExternalId>cat.Title</ExternalId> 
     } 
     <ParentExternalId>cat.ParentName</ParentExternalId> 
     <Name>cat.Title</Name> 
     @if (cat.Brand.ToLower() == "[hardcoded value]" && !string.IsNullOrEmpty(cat.ID)) 
     { 
      if (!string.IsNullOrEmpty(cat.LinkName) && !string.IsNullOrEmpty(cat.ParentName)) 
      { 
       <CategoryPageUrl><![CDATA[[URL]/gallery/@cat.ParentName.ToLower()/@cat.LinkName.ToLower()]]></CategoryPageUrl> 
      } 
      string imageName = cat.ID + ".jpg"; 
      <ImageUrl>[URL]/imageeditor/@imageName</ImageUrl> 
     } 
     else if (cat.Brand.ToLower() == "[BRAND]") 
     { 
      if (!string.IsNullOrEmpty(cat.LinkName)) 
      { 
       <CategoryPageUrl><![CDATA[[URL]/product/category/@cat.ID/@cat.LinkName.ToLower()]]></CategoryPageUrl> 
      } 
      string imagename = cat.ID + ".jpg"; 
      <ImageUrl>[URL]/image/getdvimagebypageidandimageid/@cat.ID/1/@imagename</ImageUrl> 
     } 
     else 
     { 
      if (!string.IsNullOrEmpty(cat.LinkName)) 
      { 
       <CategoryPageUrl>[URL]</CategoryPageUrl> 
      } 
     } 
     </Category> 
} 

これをビューに保存する代わりに、コントローラに移動する必要があります。これは一度にフィードを作成するためにすぐに完了しましたが、今は遅くする方法です。もちろん、ハードコーディングされた値と、クリーンアップする必要のある処理がたくさんあります。現在、このcshtmlページには、ViewBagからデータを取り出す@modelディレクティブはありません。私はこれをコントローラにプッシュし、このページをクリーンアップしたいと思います。 ViewBagをControllerに渡して処理することはできますか?私はMVCで錆びていて、正しい方向に小さな押し込みができます。ですから、私はViewBagでこのコントローラのActionResultを呼び出し、以下のようにフォーマットされたXML文字列を返したいと思います。

ありがとうございました。

+0

コントローラ内からRazorコードを使用することはできません。 XmlDocumentまたはLINQ-to-XML(XDocumentで始まる)を使用して、コードからXMLファイルを構築できます。私は[このブログの投稿](https://seattlesoftware.wordpress.com/2008/08/22/serializing-exceptions-to-xml/)に触発されたコードを使用してオブジェクトをXMLにシリアル化しました。あなたはしようとしている –

+0

あなたはRSSフィードとCSSを意味していますか? – Fran

+0

正しい。説明をありがとう。 – john

答えて

0

フィードの新しいコントローラを作成し、データベースからデータを取得し、それを反復処理してXML文字列を返すコレクションに返します。これは、ViewBagの長い処理(20分)を置き換えました。今度はコードを締めて、それをきれいにするための手洗いをします。

THanks。

John

関連する問題