web-dev-qa-db-ja.com

DropDownList razormvcを無効にしました

私のかみそりのビューでは、ドロップダウンリストを使用します。このコントロールを無効にしたい(選択できない)。

私のコードは:

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{ @disabled = "disabled" })</div>

しかし、それは機能しません、私のコントロールは常に有効になっています。 HTMLページコードは次のとおりです。

<select name="LinguaCodiceMadre" id="LinguaCodiceMadre" data-val-length-max="10" data-val-length="The field LinguaCodiceMadre must be a string with a maximum length of 10." data-val="true">
    <option></option>
    <option value="sq">Albanian</option>
    <option value="de">German</option>
    <option value="en">English</option>
    <option value="fr">French</option>
    <option value="it">Italian</option>
    <option value="pt">Portuguese</option>
    <option value="ru">Russian</option>
    <option value="es">Spanish</option>
</select>

「無効」属性なし。

私の本当の目標は、次のような条件付きでドロップダウンを有効/無効にすることです。

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{@disabled=Model.IsDisabled ? "disabled" : "false"})</div>

しかし、それは機能しません。

私は両方を試しました

new{@disabled=Model.IsDisabled ? "disabled" : "false"}

そして

new{disabled=Model.IsDisabled ? "disabled" : "false"}

しかし、何もありません。disabled属性はhtmlページにレンダリングされていません。

誰かアイデアがありますか?

6
nolanofra

私は自分の問題を解決しました:私のコードにjavascriptがありました(申し訳ありませんが、すぐには気づきませんでした)ドキュメントの準備ができたときに無効属性を削除しました。

私がしたことは:

  • htmlHelperの拡張機能の作成:

public static class HtmlExtensions
{
    public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionText, bool canEdit)
    {
        if (canEdit) return html.DropDownListFor(expression, selectList, optionText);
            return html.DropDownListFor(expression, selectList, optionText, new { @disabled = "disabled" });
    }
}
  • かみそりのビューで:

<code><div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, "", Model.IsEnabled)</div></code>

これはうまくいきます!

ありがとう

1
nolanofra

ほんの少しの修正。これを試して

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList, new{ disabled = "disabled" })</div>

これにより、ドロップダウンが確実に無効になります。

他の選択肢はjqueryを使用することです:

宣言@ Id後であなたのコントロールのためにこのようなことをしてください

$("#youid").prop("disabled", true); 

最後にこれを試してください:これが機能しない場合は、あなたの側からの問題を意味します

<div class="field-list">@Html.DropDownListFor(model => model.LinguaCodiceMadre, Model.LinguaMadreList,String.Empty, new{ disabled = "disabled" })</div>

よろしく

11
super cool

まず、ユーザー入力に基づいてドロップダウンリストを有効/無効にする場合は、javascriptを使用してドロップダウンリストを有効/無効にする必要があります。

次のロジックを使用するJavascriptの場合:

$("#checkbox1").change(function () {

  if (document.getElementById("checkbox1").checked == true) {

     document.getElementById("DropDown1").disabled = true;
  }
  else {

     document.getElementById("DropDown1").disabled = false;
  }

});

これがFiddle私があなたのために試した、完璧に悩んでいるデモです

フィドルデモ

  1. 2つのプロパティを持つモデルがあります
  2. デモ用にコントローラーのドロップダウンにテストデータを入力しています(あなたの場合はデータベースから取得します)
  3. ビューで、両方の入力にIDを割り当てています。
  4. そして最後に、以下のビューには、チェックボックスを駆動してチェックされているかどうかを確認するJavascript関数があります。チェックされている場合は、ドロップダウンから値を選択できません。それ以外の場合は、値の選択が可能です。
5
Jack Ryder