Как мне преодолеть свои страхи перед <%%> в моей разметке ASP.Net MVC?

Поэтому я полностью согласен с основными принципами ASP.NET, тестируемостью, SoC, контролем HTML ... это потрясающе. Однако, будучи новичком в этом, у меня есть огромная связь с разметкой. Я знаю, что это происходит из-за моей ненависти к классическому ASP, и я не могу не чувствовать, что вошел в сумеречную зону, когда вижу это .

Я не знаю, какова альтернатива (могу ли я использовать элементы управления сервером, привязку данных и т. Д.?)

12.12.2008 17:15:48
Код на картинке выглядит более или менее организованным.
liggett78 12.12.2008 17:24:43
12 ОТВЕТОВ
РЕШЕНИЕ

Есть вещи, которые вы можете сделать, чтобы помочь очистить разметку, но я согласен, что это может стать немного неприличным.

Например, это расширение, которое я сделал, чтобы сделать RSS-spitter-outer :)

  public static string RSSRepeater<T>(this HtmlHelper html, IEnumerable<T> rss) where T : IRSSable
    {
        StringBuilder result = new StringBuilder();

        if (rss.Count() > 0)
        {
            foreach (IRSSable item in rss)
            {
                result.Append("<item>").Append(item.GetRSSItem().InnerXml).Append("</item>");
            }
        }

        return result.ToString();
    }

Так что в моем интерфейсе все, что у меня есть, <%=Html.RSSRepeater(mydata)%>это гораздо приятнее.

11
23.05.2017 12:25:02
Html-помощники довольно хороши, но в некоторых случаях почти хуже иметь ваш HTML в сцепленном коде, а не в представлении.
John Sheehan 12.12.2008 17:28:53
Я согласен, особенно когда вы находитесь в среде, где разработчики внешнего интерфейса должны легко изменять разметку.
qui 12.12.2008 17:30:18
Это правда: разметка довольно строгая и четкая.
Joel Coehoorn 12.12.2008 17:48:41

Избегание чтения супа тега может быть полезным. Как правило, вы не можете использовать серверные элементы управления (хотя некоторые могут работать), нет обратной передачи или состояния просмотра. Я не думаю, что вы можете использовать привязку данных (опять же, могут быть исключения, я не уверен, как ASP.NET MVC обрабатывает серверные элементы управления в представлении.) - самый простой способ «привязать данные» к чему-либо - передать список или массив данных в представление и использовать foreach для создания из него HTML.

4
12.12.2008 17:32:55
Это было отличное чтение ... все еще не люблю его, но это лучше, чем раздутый из-за контроля над сервером управления ... Хотя я скучаю по привязке данных ... нюхать нюхать.
Webjedi 15.12.2008 17:54:24

1) Помощники уменьшают шум HTML
2) Частичные представления, чтобы разбить большие страницы / повторно использовать код представления
3) Попробуйте другой механизм рендеринга, такой как Sparkline
4) REFACTOR, если ваше представление содержит слишком много ifоператоров.

7
12.12.2008 17:32:25

Переместите некоторые (не все, только в тех случаях, когда это имеет смысл) логику отображения (например, даты) в вашу модель. Например, в вашем примере вы можете добавить строковое свойство Task.DisplayDate, которое обрабатывает вызов .ToShortDateString (). Затем, если это когда-либо изменится, вы измените все это в одном месте, и это сократит код в представлении.

HTML помощники хороши, иногда. Мне не очень нравится, когда мой HTML-код в сцепленных строках или StringBuilder где-то в классе, но если вы делаете что-то много, что работает со множеством различных наборов данных, это не так уж плохо.

Я также изменил бы ваши настройки форматирования кода C #, чтобы в одной строке были скобки. Это сокращает беспорядок. К сожалению, у вас не может быть отдельных настроек для этого между редактором кода и редактором HTML, поэтому вам придется привыкнуть к этому и в своем коде. Это не худшая вещь в мире.

Помогает и то, что сказали другие: используйте частичные представления и строгую типизацию.

1
12.12.2008 17:33:10

Если вы нажмете Ctrl + Z после того, как он отформатирует, он просто отменяет форматирование, а не ввод текста.

Я считаю полезным, чтобы первая скобка была в той же строке, что и оператор if

0
13.12.2008 02:54:34

Если вы говорите о HTML из визуализированных элементов управления, я боюсь, что он не станет лучше только потому, что у вас есть хорошая основанная на стандартах оболочка для вашего View в MVC. Без адаптированных элементов управления, выход по-прежнему дурацкий вложенный табличный код 1995 года.

Спасибо, Microsoft!

0
13.12.2008 02:58:59

используйте комментарии на стороне сервера<%-- comment --%> для разделения блоков и повышения читабельности. используйте дополнительный межстрочный интервал, чтобы разделить блоки (похоже, SO почему-то убивает мой межстрочный интервал здесь).

        <%-- Go through each testimonial --%>
        <% foreach (var testimonial in ViewData.Model.Testimonials) { %>

        <div class="testimonialFrame">
            <div class="testimonialHeader"><%= testimonial.summaryText %></div>


            <%-- Show video if available --%>
            <% if (string.IsNullOrEmpty(testimonial.Video.FullURL) == false) { %>

            <div  style="padding-top:12px">
                <% Html.RenderAction("YouTubeControl", "Application", new { youTubeId = testimonial.Video.FullURL }); %>
            </div>

            <% } %>

            <div class="roundedBox" style="margin-top:15px">
                <div id="txtTestimonialText" class="testimonialText paddedBox"><%= testimonial.TestimonialText %></div>
            </div>

            <div class="testimonialFooter"><%= testimonial.name %></div>
        </div>

        <% } %>
0
25.01.2009 04:27:08

Очень редко используются вспомогательные методы (я НЕ говорю о вспомогательных методах расширения) для написания HTML-кода в самом представлении с использованием объектной модели Html. Я бы не рекомендовал это, если у вас нет странной логики, которую вы не можете легко написать в представлении. Пока код в .aspx.cs является кодом VIEW, тогда все в порядке.

В .aspx файле вашего View:

 <%-- render section --%>
 <% RenderTextSection(section); %>

В 'codebehind' вашего View вы используете HtmlGenericControl для создания HTML, а затем следующую строку для его записи:

htmlControl.RenderControl(new HtmlTextWriter(Response.Output));

Мой полный метод:

protected void RenderTextSection(ProductSectionInfo item)

    {
        HtmlGenericControl sectionTextDiv = new HtmlGenericControl("div");

        bool previousHasBulletPoint = false;
        System.Web.UI.HtmlControls.HtmlControl currentContainer = sectionTextDiv;

        foreach (var txt in item.DescriptionItems)
        {
            if (!previousHasBulletPoint && txt.bp)
            {
                // start bulleted section
                currentContainer = new HtmlGenericControl("UL");
                sectionTextDiv.Controls.Add(currentContainer);
            }
            else if (previousHasBulletPoint && !txt.bp)
            {
                // exit bulleted section
                currentContainer = sectionTextDiv;
            }

            if (txt.bp)
            {
                currentContainer.Controls.Add(new HtmlGenericControl("LI")
                {
                    InnerHtml = txt.t
                });
            }
            else
            {
                currentContainer.Controls.Add(new HtmlGenericControl()
                {
                    InnerHtml = txt.t
                });
            }

            previousHasBulletPoint = txt.bp;
        }

        sectionTextDiv.RenderControl(new HtmlTextWriter(Response.Output));
    }
0
25.01.2009 04:32:07
Материал, который обычно находится в коде (то есть обработчиках событий), теперь не одобряется, но этот подход, безусловно, оправдан. Вы недовольны этим только ради хмурого взгляда?
JoshJordan 18.08.2009 16:04:29
@josh Theres много чего происходит
Simon_Weaver 18.08.2009 20:24:38

Я бы посоветовал взглянуть на шаблонизатор Velocity, который использовал MonoRails. ASP.NET MVC очень точно моделирует себя в формате MonoRails, поэтому использовать шаблоны Velocity довольно просто.

Нажмите здесь, чтобы узнать больше .

0
25.01.2009 04:46:24

Мне нравится делать подсветку синтаксиса для моих тегов <%%> очень похожей на цвет фона. Я использую черный фон и серебристый цвет (у меня нет специального цвета под рукой) для моих тегов <%%>. Это плюс другие предложения здесь должны сделать ваш код более читабельным. Конечно, вы всегда можете попробовать другой движок вида (в этом и заключается прелесть MVC!)

1
25.01.2009 20:56:26

Я хотел бы взглянуть на некоторые другие доступные движки View, лично мне действительно нравится Spark View Engine, но есть много других.

Скотт Хансельман (Scott Hanselman) написал отличную статью, в которой рассматривал искру и Нхамл с некоторыми фрагментами разметки, на которые вы можете посмотреть, чтобы убедиться, что она соответствует вашей эстетике :)

http://www.hanselman.com/blog/TheWeeklySourceCode30SparkAndNHamlCrazyASPNETMVCViewEngines.aspx

1
25.01.2009 23:11:12

Хорошо, теперь вы можете попробовать Razor (в ASP.NET MVC 3)

Я просто надеюсь, что "@" вас тоже не испугает: P

0
11.10.2010 14:47:09