2017-09-25 52 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> 
} 

我需要將其移到控制器上,而不是保留在視圖上。這很快就完成了,以便一次創建Feed,但現在是減速的方式。更不用說有很多硬編碼值和一些需要清理的處理。現在這個cshtml頁面沒有@model指令,它從ViewBag中提取數據。我想把它推到控制器並清理這個頁面。我可以將ViewBag傳遞給控制器​​並進行處理嗎?我在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

我爲feed創建了一個新的控制器,它從數據庫中提取數據並將其返回到我可以迭代並返回XML字符串的集合中。這取代了ViewBag上的長處理(20分鐘)。現在我將收緊代碼,並將擦洗乾淨。

THanks。

約翰

相關問題