29

私は C# .Net Web アプリを持っています。そのアプリでは、システムにログインしているユーザーに基づいて、条件付きでHtml.TextBoxForコントロール (コントロールも) を無効にする必要があります。Html.DropDownListFor使ってみた

 @Html.TextBoxFor(model => model.ProposalName, new { @ViewBag.IsDisabled })

コントローラーでString.Emptyまたは「無効」@ViewBag.IsDisabledに設定されている場所。ただし、これはコントロールが無効になっていないかのようにレンダリングされます。私が試したときIsDisabled='disabled'IsDisabled=""

@Html.TextBoxFor(model => model.ProposalName, new { @ViewBag.Disabled })

ViewBag.Disabledテキストが含まれていない場合でも、コントロールは常に無効になっていました。Html.TextBoxFor()コントロールを条件付きで無効にするにはどうすればよいですか?

4

6 に答える 6

58

試す

@Html.TextBoxFor(model => model.ProposalName, ViewBag.Disabled ? (object)new { disabled="disabled" } : new {})
于 2012-01-31T20:07:31.357 に答える
20

@epignosisx によって投稿された解決策は機能しますが、他の属性を追加する場合は、両方のオブジェクト (あるものとdisabled現在空のもの) に追加する必要があるため、問題になる可能性があります。

他の bool プロパティがあるとさらに悪いことに、それぞれの組み合わせに 1 つずつ、4 つの異なるオブジェクトが存在することになります。

ここでの最善の解決策 (もう少しコードを追加します) は、HtmlHelper の拡張メソッドを作成して、ブール値のプロパティをパラメーターとして受け取ることです。

public static MvcHtmlString TextBoxDisabledFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, bool disabled, object htmlAttributes = null)
{
    return TextBoxDisabledFor(htmlHelper, expression, disabled, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}

public static MvcHtmlString TextBoxDisabledFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, bool disabled, IDictionary<string, object> htmlAttributes)
{
    if (htmlAttributes == null)
        htmlAttributes = new Dictionary<string, object>();
    if (disabled)
        htmlAttributes["disabled"] = "disabled";
    return htmlHelper.TextBoxFor(expression, htmlAttributes);
}

ここに別の例があります

于 2013-11-01T12:04:43.097 に答える
11

これは、拡張機能を必要とせず、HTML 属性を 1 つだけに制限しない、私が使用する方法です。モデルに「無効」という名前のブール値プロパティがあることを前提としていますが、三項演算子のブール値に評価される限り、そこに好きなものを入れることができます。

@Html.TextBoxFor(model => model.Whatever,
  new Dictionary<string, object>() {
    { "size", "5" },
    { "class", "someclasshere" },
    { model.Disabled ? "disabled" : "data-notdisabled", "disabled" }
  })

標準のショートカット表記の制限は、属性の名前を動的にできないことです。正しいタイプのディクショナリを作成することで、属性名を動的にすることができ、そのディクショナリを属性のディクショナリとしてテキスト ボックスに渡します。フィールドを無効にしない場合、「disabled」という名前の属性の代わりに「data-notdisabled」という名前の属性が渡されます。この属性はブラウザーによって無視されます。

于 2016-09-20T19:50:02.410 に答える