Синтаксис для ASP.Net MVC Синтаксис репитера Фила Хаака с использованием Razor (MVC 3)? - PullRequest
0 голосов
/ 14 декабря 2010

Я недавно начал использовать ASP.Net MVC 3 RC 2 и пытался перенести существующий веб-сайт в MVC 2 через синтаксис Razor. В приложении MVC 2 я использую повторитель кодовой базы, который Фил Хэк любезно предоставил в следующем: Кодовый повторитель Фила Хаака

Мой вопрос касается синтаксиса для Razor. Я не понимаю, как шаблон в следующем блоке может быть переписан в Razor и не могу найти какую-либо документацию, чтобы помочь (первые дни для документации или моя простота ...):

<% Html.Repeater<ObjectToUse>(Model, "", "alt", (item, css) =>
   { %>
        <tr class="<%= item.Enabled ? css : "disabled" %>">
            <td><%= item.Name%></td>
            <td><%= item.Description%></td>
            <td><%= Html.RouteLink("Edit", item.ObjectToUseRouteValues("Edit"))%></td>
            <td></td>
            <td><%= Html.RouteLink("Select", item.ObjectToUseRouteValues())%></td>
        </tr>
<% }); %>

Проблема возникает при применении шаблона между фигурными скобками (tr). Я попытался использовать элемент управления WebGrid, однако он не обеспечивает функции, которые требуются для установки «отключенной» строки (я думаю).

Ответы [ 2 ]

1 голос
/ 19 декабря 2010

я написал @helper версию. @helper не используйте общий метод.

@helper ForEach(IEnumerable<int> items, Func<object, HelperResult> template){
    foreach(var item in items){
        Write(template(item));
    }
}
<div>
<ul>
@ForEach(Enumerable.Range(1,5),
    @<li>@item</li>
)
</ul>
</div>

надеюсь, что этот код.

0 голосов
/ 15 декабря 2010

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

Обновлено

С ответом Эндрю Медсестры: " К сожалению, это сделано в текущем парсере, хотя я должен отметить, что мы хотели быулучшаем его. Проблема в том, что разметка действительна только в начале оператора (что технически является тем, где вы ее поместили), но наш C # -парсер не достаточно умен, чтобы в данный момент обнаруживать лямбды. "

Хотя это может быть устаревшим:)

@Html.Repeater(Model, "row", "row-alt", 
    @<tr class="@item.ClassType : "disabled"">
        <td>@item.Name</td>
        <td>@item.Description</td>
        <td>@Html.RouteLink("Edit", item.ObjectToUseRouteValues("Edit"))</td>
        <td></td>
        <td>@Html.RouteLink("Select", item.ObjectToUseRouteValues())</td>
    </tr>
)

    public static IHtmlString Repeater<T>(this HtmlHelper html, IEnumerable<T> items,
         string className, string classNameAlt, Func<T, HelperResult> render) {
        if (items == null)
            return new HtmlString("");

        int i = 0;
        StringBuilder sb = new StringBuilder();
        foreach (var item in items) {
            item.ClassType = item.Enabled ? (i++ % 2 == 0 ? className : classNameAlt) : "disabled";
            sb.Append(render(item).ToHtmlString());
        }

        return new HtmlString(sb.ToString());
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...