Невозможно назначить лямбда-выражение на внешнем интерфейсе, чтобы решить, требуется ли поле или нет - PullRequest
0 голосов
/ 13 октября 2018

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

@model MyApp.ViewModels.ModelVM
...
@Html.Label("Tickets", new { @class = "control-label" })
@Html.TextBoxFor(model => model.FooBar,
     new
     {
     @class = "form-control",
     @required = (model => model.Foo == 1 ? true : false),
     })

Я получаю ошибку компилятора «Невозможно назначить лямбда-выражение анонимному типу»

Как получить желаемый результат?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Вы не можете использовать лямбда-выражение для анонимного типа внутри помощника HTML (т.е. htmlAttributes).Чтобы использовать условный атрибут required в качестве атрибута HTML, вы можете сделать это, используя троичный оператор, например:

@Html.TextBoxFor(model => model.FooBar, Model.Foo == 1 ? 
     (object)new { @class = "form-control", @required = "required" } :
     (object)new { @class = "form-control" })

Или используя блок if:

@if (Model.Foo == 1)
{
    @Html.TextBoxFor(model => model.FooBar, new { @class = "form-control", @required = "required" })
}
else
{
    @Html.TextBoxFor(model => model.FooBar, new { @class = "form-control" })
}

Примечание: required Атрибут HTML для <input> элементов является логическим атрибутом , значение которого false обозначено отсутствием атрибута, а наличие этого атрибута просто указывает trueзначение:

Значения "true" и "false" равны , не допускаются для логических атрибутов.Чтобы представить ложное значение, атрибут должен быть вообще пропущен.

Связанная проблема:

Условный атрибут Html с использованием razor @html helpers

0 голосов
/ 13 октября 2018

Отрывок из документации Microsoft по анонимным типам и имеющемуся исключению: «Анонимные типы содержат одно или несколько общедоступных свойств только для чтения ... Выражение, которое используется для инициализации свойства, не может быть нулевым, anанонимная функция или тип указателя. "

Использование только проверки для инициализации свойства должно помочь.

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