Использование лямбды для указания свойства классу Helper из Razor Partial View - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь написать шаблон EditorTemplate для общего применения классов CSS, зависящих от логики, предоставляемой помощником, передающему модель и дополнительные данные из ViewBag:

@using LSC.DCMP.Web.UI.Helpers
@model String

@ValidationFieldHelper.GetCSSClass(m => Model, @ViewBag.Step) 

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

public static class ValidationFieldHelper
{
    public static object GetCSSClass(Func<object, string> func, object step)
    {
        throw new NotImplementedException();
    }
}

Когда я пытаюсь запустить приложение, оно перестает компилироваться со следующей ошибкой:

"Невозможно использовать лямбда-выражение в качестве аргумента для динамически отправляемой операции без предварительного приведения его к типу дерева делегата или выражения".

Я читал, что лямбда-синтаксис не полностью поддерживается с использованием шаблонов Razor, поэтому я не уверен, как реализовать эту функцию.

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

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

Два другихварианты того, что предлагает старший байт:

  1. Приведите динамическое значение, которое позволяет компилятору узнать, что динамическое разрешение разрешит в

    @ValidationFieldHelper.GetCSSClass(m => Model, (object)@ViewBag.Step)
    
  2. Установитьдинамический для переменной перед использованием (в основном та же сделка, что и выше)

    @{ object vstep = ViewBag.Step; }
    @ValidationFieldHelper.GetCSSClass(m => Model, vstep)
    

Оба из них выдают правильное исключение для меня.

0 голосов
/ 24 августа 2011

Будет

@ValidationFieldHelper.GetCSSClass((Func<object, string>) (m => Model), @ViewBag.Step)

работаешь на тебя? Это не самое чистое решение, но я мог бы получить его, выбрасывая NotImplementedException ...

...