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

Просто чтобы добавить к тому, что сказали другие люди, объявив публичное поле, поле доступно для чтения и записи. объявляя публичное автоматическое свойство, хотя свойство является общедоступным, вы все равно можете добавить модификатор для контроля доступности на уровне get / set.

public string FirstName { get; private set; }

Пользователь вашего класса видит FirstName как общедоступное свойство. Однако он / она не может писать.

14
задан Fabian Steeg 25 January 2009 в 04:50
поделиться

11 ответов

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

, Например, это - расширение, я сделал для создания 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
ответ дан 1 December 2019 в 12:02
поделиться

1) Помощники уменьшают шум HTML
2) Частичные Представления для разбивания большего кода представления страниц/повторного использования
3) Попытка другой механизм визуализации, такой как Sparkline
4) ОСУЩЕСТВЛЯЮТ РЕФАКТОРИНГ, если представление включает слишком многих if операторы.

7
ответ дан 1 December 2019 в 12:02
поделиться

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

1
ответ дан 1 December 2019 в 12:02
поделиться

суп тега Предотвращения чтение могло бы быть полезным. Обычно Вы не можете использовать управление сервером (некоторые могли бы работать, хотя), нет никакой обратной передачи или состояния отображения. Я не думаю, что можно использовать привязку данных (снова могли бы быть исключения, я не уверен, как ASP.NET MVC рассматривает управление сервером в представлении.) - самый легкий метод для "связывания с данными" чего-то должен передать список или массив данных в представление и использовать foreach для создания HTML из него.

4
ответ дан 1 December 2019 в 12:02
поделиться

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

Scott Hanselman сделал большое сообщение, смотрящее на искру и Nhaml с некоторыми отрывками разметки, что можно посмотреть на видеть, соответствует ли это эстетике :)

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

1
ответ дан 1 December 2019 в 12:02
поделиться

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

я нахожу это полезным для хранения первой скобки на той же строке как если оператор

0
ответ дан 1 December 2019 в 12:02
поделиться

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

Спасибо, Microsoft!

0
ответ дан 1 December 2019 в 12:02
поделиться

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

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

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

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

1
ответ дан 1 December 2019 в 12:02
поделиться

используйте сторона сервера комментарии <%-- comment --%> для разделения удобочитаемости увеличения и блоков. используйте дополнительный межстрочный интервал для разделения, блоки также (ПОЭТОМУ, кажется, уничтожает мой межстрочный интервал здесь по некоторым причинам).

        <%-- 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
ответ дан 1 December 2019 в 12:02
поделиться

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

Щелкают здесь для узнавания больше .

0
ответ дан 1 December 2019 в 12:02
поделиться

Достаточно редко используйте вспомогательные методы (я НЕ говорю о дополнительных вспомогательных методах) записать HTML-код в самом представлении с помощью модели объекта HTML. Я не повторно прокомментировал бы это, если у Вас нет некоторой странной логики, что Вы наклоняете легко запись в представлении. Пока код в .aspx.cs является кодом ПРЕДСТАВЛЕНИЯ затем его штраф.

В .aspx файле Вашего Представления:

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

В 'codebehind' Вашего Представления Вы используете 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
ответ дан 1 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: