Лучший способ сделать это ..? - PullRequest
1 голос
/ 18 августа 2010

Я не думаю, что это должно быть на мой взгляд, но вместо этого обрабатывается контроллером.Я полагаю, что это может быть сделано в SQL (может быть очень быстро) или в контроллере (я думаю, что это может быть лучше), или, может быть, даже помощник HTML.Но я не уверен, как распаковать / перепаковать мой IQueryable / IEnumberable в контроллере.Я думаю, что лучше всего дать дизайнеру шаблонов все, что им нужно, а затем и немного, поэтому следует предоставить как полное описание, так и выдержку (которая генерируется).

Мой репозиторий:

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

1 Ответ

3 голосов
/ 18 августа 2010

Предложите сохранить ваш репозиторий как есть. Предложите расширить класс 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) + "...";
   }
}

Тогда ваш View просто звонит:

<p>
    <%=spotlight.WellFormattedDescription  %>
    <a href="<%= Url.Action("Details", "Spotlights", new { id=spotlight.SpotlightID}) %>">foo</a>
</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...