Разве нельзя вызывать методы внутри элементов @ html? - PullRequest
1 голос
/ 12 февраля 2020

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

1.

@Html.TextBoxFor(m => m.Name, new { @class = "form-control", id = "x", @readonly = User.HasAccess() ? "false" : "readonly" })

2.

@Html.DropDownListFor(m => m.Animal, Model.Animals, new { @class = "form-control", id = "x-dropDownList", disabled = User.HasAccess() ? "false" : "disabled" })

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

Поэтому мне интересно, нельзя ли вызывать методы (которые не являются функциями js или такими) внутри элемента @ html. Есть ли что-то, что я могу сделать, чтобы сделать эту работу, не делая ничего вне самого представления? (не меняйте метод и т. д.)

Я ценю вашу помощь!

Ответы [ 3 ]

2 голосов
/ 12 февраля 2020

Нет проблем с использованием вызова метода или троичного оператора в Razor.

Ваша проблема с сгенерированными HTML.

readonly и disabled не принимают логическое значение ценности; они применимы, просто присутствуя, как показано здесь:

<input readonly="true" value="true" />
<input readonly="false" value="false" />
<input readonly value="attribute only" />
<input value="attribute omitted" />

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

0 голосов
/ 13 февраля 2020

Решение, которое сработало для меня:

@Html.TextBoxFor(m => m.Name, User.HasAccess() ? new { @class = "form-control", id = "x" } : (object) new { @class = "form-control", id = "x", @readonly = "readonly" })


@Html.DropDownListFor(m => m.Animal, Model.Animals, User.HasAccess() ? new { @class = "form-control", id = "x-dropdownlist" } : (object)new { @class = "form-control", id = "x-dropdownlist", disabled = "disabled"})
0 голосов
/ 12 февраля 2020

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

В верхней части представления захватывает пользователя. HasAccess () в переменной внутри блока сценария бритвы. После этого установите точку останова и проверьте ее значение в отладчике. Скорее всего, пользователь фактически не имеет доступа на основе возвращаемого значения метода.

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