Сделать поле отключено с помощью Razor в MVC Core [duplicate]

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

Например:

var result = 1.0 + 2.0;     // result === 3.0 returns true

... вместо:

var result = 0.1 + 0.2;     // result === 0.3 returns false

Выражение 0.1 + 0.2 === 0.3 возвращает false в JavaScript, но, к счастью, целочисленная арифметика в плавающей запятой является точной, поэтому ошибки с десятичным представлением можно избежать путем масштабирования.

В качестве практического примера, чтобы избежать проблем с плавающей запятой, где точность имеет первостепенное значение, рекомендуется обрабатывать деньги как целое число, представляющее число центов: 2550 центов вместо 25.50 долларов.


1 Дуглас Крокфорд: JavaScript: Хорошие детали: Приложение A - Ужасные части (стр. 105) .

13
задан Shyju 16 February 2016 в 21:54
поделиться

4 ответа

Я столкнулся с той же проблемой с помощником select tag, я пробовал несколько вещей, и это сработало. Попробуйте это -

<textarea asp-for="Doc" disabled="@(Model.MustDisable ? "disabled" : null)"></textarea>

25
ответ дан GauravD 23 August 2018 в 17:22
поделиться

На самом деле это очень просто, атрибут disable уже работает так, как вы хотите - вы можете передать логическое значение:

<textarea asp-for="Doc" disabled="@Model.MustDisable"></textarea>

, если false, атрибут disabled не отображается

1
ответ дан Daniel Stackenland 23 August 2018 в 17:22
поделиться

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

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

Для следующего:

[HtmlTargetElement("textarea", Attributes = ForAttributeName)]
public class MyCustomTextArea : TextAreaTagHelper
{
    private const string ForAttributeName = "asp-for";
...

С помощью следующего _ViewImports.cshtml:

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@addTagHelper "*,YourAssemblyNameHere"

Оба параметра MyCustomTextArea и TextAreaTagHelper будут выполняться для каждого тега textarea.

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

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@addTagHelper "*,YourAssemblyNameHere"
@removeTagHelper "Microsoft.AspNet.Mvc.TagHelpers.TextAreaTagHelper, Microsoft.AspNet.Mvc.TagHelpers"
2
ответ дан Eric Scott 23 August 2018 в 17:22
поделиться

Помощник тега textarea не имеет прямой поддержки для условного отображения отключенной текстовой области. Но вы всегда можете расширить TextAreaTagHelper и добавить эту функцию.

Итак, создайте новый класс, который наследуется от класса TextAreaTagHelper.

[HtmlTargetElement("textarea", Attributes = ForAttributeName)]
public class MyCustomTextArea : TextAreaTagHelper
{
    private const string ForAttributeName = "asp-for";

    [HtmlAttributeName("asp-is-disabled")]
    public bool IsDisabled { set; get; }

    public MyCustomTextArea(IHtmlGenerator generator) : base(generator)
    {
    }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        if (IsDisabled)
        {
            output.Attributes["disabled"] = "disabled";
        }           
        base.Process(context, output);
    }
}

В вашем _ViewImports.cshtml файл, используя директиву @addTagHelper, укажите сборку, в которой указан вышеописанный класс, чтобы наш новый помощник тега был доступен в других представлениях бритвы.

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@addTagHelper "*,YourAssemblyNameHere"

Теперь в ваших представлениях вы можете использовать его например

@model YourSomeViewModel
<textarea asp-for="Doc" asp-is-disabled="Model.MustDisable"></textarea>

, где SomeViewModel имеет свойство Doc и MustDisable.

public class YourSomeViewModel
{
  public string Doc { set;get; }
  public bool MustDisable  { set;get; }
}
16
ответ дан Shyju 23 August 2018 в 17:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: