Нужна помощь в создании лучшего метода расширения HtmlHelper - PullRequest
1 голос
/ 10 февраля 2010

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

Вот HTML для большинства наших частичных входных просмотров

<% if (Html.IsInputReadOnly()) { %>
<td>
    Id
</td>
<td>
<%= Html.TextBox(
   "Id"
   , (Model == null ? null : Model.Id)
   , new { @readonly = "readonly", @disabled="disabled" }
 )%>
 <% } elseif (Html.IsInputDisplayable() == false) { %>
 <td></td>
 <td></td>
 <% } else { %>
 <td>Id</td>
 <td><%= Html.TextBox("Id")%>
  <%= Html.ValidationMessage("Id", "*")%>
 </td>
<%} %>

Вот мои методы увлечения

public static bool IsInputReadOnly(this HtmlHelper helper)
{
    string actionName = ActionName(helper);

    // The Textbox should be read only on all pages except for the lookup page
    if (actionName.ToUpper().CompareTo("EDIT") == 0)
        return true;
    return false;
}

public static bool IsInputDisplayable(this HtmlHelper helper)
{
    string actionName = ActionName(helper);

    // The Textbox should be read only on all pages except for the lookup page
    if (actionName.ToUpper().CompareTo("CREATE") == 0)
        return true;
    return false;
}

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 08 апреля 2010

Можете ли вы объединить всю эту логику в один метод расширения?

<%= Html.SmartDisplay("Id", (Model == null ? null : Model.Id))%> 

Затем в методе расширения поместите весь код, который проверяет, отображается ли он или доступен только для чтения. Это не будет работать, если у вас нет стандартных макетов таблиц на всех страницах и для всех элементов управления, но если это так, это может сработать.

0 голосов
/ 10 февраля 2010

Если бы вы могли создать класс ViewModel cutom, который имеет коллекцию пары KeyValue, где ключ = имя элемента управления и значение = HtmlAttributes для этого элемента управления, контроллер может установить эти атрибуты.

В представлении вы будете напрямую связывать атрибут HtmlAttribute с элементом управления.

Не пробовал, но может сработать ...

НТН

РЕДАКТИРОВАТЬ: пара KeyValue HtmlAttributes может быть набором флагов, таких как IsEditable, IsVisible и т. Д., Которые можно интерпретировать в представлении с помощью метода расширения для рендеринга HtmlAttributes по мере необходимости, чтобы мы не смешивали часть HTML с контроллером

0 голосов
/ 10 февраля 2010

Я бы разделил только для чтения и редактируемые части на 2 отдельных частичных просмотра. Оставьте это своему контроллеру, чтобы решить, какой вид должен быть представлен. Вы не должны принимать такого рода решения в ваших взглядах - они должны быть глупыми.

...