2010-08-18 74 views
1

我不認爲這應該在我看來,而是由控制器處理。我想這可以在SQL中完成(可以快得難看)或者在控制器中(我認爲這可能是最好的),或者甚至可以是HTML助手。但是,我不確定如何在控制器中解壓/重新包裝我的IQueryable/IEnumberable。我認爲給模板設計者一切他們需要的,然後一些是最好的,因此提供完整的描述以及摘錄(它是生成的)。更好的方法來做到這一點..?

想法/想法表示讚賞。

<p> 
    <% var description = Regex.Replace(Regex.Replace(spotlight.Description, "<[^>]*>", string.Empty), "[\0x0020\r\n]+", " ").TrimEnd(); 
     if (description.Length < 297) 
     { 
     %> <%= description %> <% 
     } else { %> 
     <%= description.Substring(0, 297) + "..." %> <% 
     }      
    %> <a href="<%= Url.Action("Details", "Spotlights", new { id=spotlight.SpotlightID}) %>">Read &raquo;</a> 
</p> 

我的資料庫:

public IQueryable<Spotlight> FindAllSpotlights() 
    { 
     return from spotlight in db.Spotlights 
        where spotlight.PublishDate <= DateTimeOffset.Now 
        orderby spotlight.PublishDate descending 
        select spotlight; 
    } 

我的控制器:

public ActionResult Index() 
    { 
     var spotlights = spotlightRepository.FindTopSpotlights().ToList(); 

     return View(spotlights); 
    } 

回答

3

建議保持你的倉庫原樣。建議您擴展您的Spotlight類以封裝屬性或方法中的所有Regex邏輯。

用良好格式化的描述擴展Spotlight的行爲。這將保持你的視圖的邏輯。

public partial class Spotlight 
{ 
    public string WellFormattedDescription() 
    { 
    //all the logic to return a well formatted Spotlight.Description 
    string desc = Regex.Replace(Regex.Replace(this.Description, "<[^>]*>", 
           string.Empty), "[\0x0020\r\n]+", " ") 
         .TrimEnd(); 

    if (desc.Length < 297) 
     return desc; 
    else 
     return desc.Substring(0, 297) + "..."; 
    } 
} 

然後您查看簡單的調用:

<p> 
    <%=spotlight.WellFormattedDescription %> 
    <a href="<%= Url.Action("Details", "Spotlights", new { id=spotlight.SpotlightID}) %>">foo</a> 
</p> 
相關問題