В дополнение к другим правильным ответам вы можете рассмотреть возможность масштабирования ваших значений, чтобы избежать проблем с арифметикой с плавающей запятой.
Например:
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) .
Я столкнулся с той же проблемой с помощником select tag, я пробовал несколько вещей, и это сработало. Попробуйте это -
<textarea asp-for="Doc" disabled="@(Model.MustDisable ? "disabled" : null)"></textarea>
На самом деле это очень просто, атрибут disable уже работает так, как вы хотите - вы можете передать логическое значение:
<textarea asp-for="Doc" disabled="@Model.MustDisable"></textarea>
, если false, атрибут disabled
не отображается
Я размещаю это отдельно, так как у меня недостаточно репутации, чтобы добавить комментарий к ответу 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"
Помощник тега 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; }
}