2010-08-18 3 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> 
Смежные вопросы