0

EmployeeMVC3/Razor アプリケーションの「編集」ビューにバインドしているエンティティがあります。Employeeエンティティには のプロパティがありますOccupationTypeId。複数のルックアップ値を含むテーブルをOccupationTypeId指します。OccupationType自然な選択は、職業のリストを含むタグを@Html.DropDownListForレンダリングするために使用することです。<select>

OccupationTypeテーブル スキーマはかなり標準的です: Id, Name, Description, IsEnabled. OccupationTypes は無効にできるため、OccupationTypeIdドロップダウンで無効なオプションを引き続きレンダリングして、ユーザーが無効な場合にいつでも選択内容を確認できるようにしたいのですが、ユーザーは無効なオプションを選択できません。つまり、ユーザーは既存OccupationTypeIdのオプションを無効に変更することはできません。

オプションを使用してタグを作成し、無効なオプションに属性を追加するだけの@Html拡張メソッドを作成することを考えました。それはまっすぐだと思います...<select>disabled

ただし、選択したオプションを無効にすると、コントローラーメソッドにポストバックされないようです。つまり、Employee.OccupationTypeId編集に投稿すると null になります。

この動作を変更する方法はありますか、またはこれは MVC 3 に組み込まれていますか? 隠しフィールドを使用することを考えましたが、OccupationTypeId が必要で、検証が有効になっている場合はどうなりますか?

他の誰かがこれに直面しましたか?

ありがとう

4

2 に答える 2

2

ドロップダウン リストで変更イベントが発生したときに更新される隠しフィールドを作成できます。このようにして、OccupationTypeIdフィールドは常に渡されます。

<input name='CurrentOccupationId' type='hidden' value='@Model.Employee.OccupationTypeId' />

<script>
    $(function() {
        $('#dropDownId').change(function() {
            $('input[name="CurrentOccupationTypeId"]').val($(this).val());
        });
    });
</script>
于 2013-01-31T22:04:45.133 に答える
0

この動作を変更する方法はありますか、またはこれは MVC 3 に組み込まれていますか? 隠しフィールドを使用することを考えましたが、OccupationTypeId が必要で、検証が有効になっている場合はどうなりますか?

特に MVC 3 とは何の関係もありません。無効になっているすべての html 要素は、一般にポスト バックしません。

私が使用した解決策は、CSS で適切な要素をスタイリングすることにより、無効化要素を「シミュレート」することです。たとえば、要素の背景 (または前景) 色を灰色に設定し、代わりにreadonly属性を設定することができます (意味がある場合)。

この類似スレッドを参照してください。

于 2013-01-31T22:20:23.057 に答える