0

私のモデルには、Categoryタイプのフィールドがあります。

...
public Category Category { get; set; }
...

カテゴリクラスは次のようになります。

public class Category 
{
    public int Id { get; set; }
    public string Description { get; set; }
}

私のビューでは、DropDownListsにHtmlHelperを使用しています。

@Html.DropDownListFor(m => m.Category.Id, new SelectList(Model.Categories, "Id", "Description"))

フォームを投稿すると、モデルのCategoryフィールドが、Id値が正しく設定されているCategoryオブジェクトのインスタンスに設定されます。

説明フィールドはnullのままになります。クラス全体がシリアル化されてクライアントに渡されるわけではないことを理解しています。複雑なクラスでは必ずしもそうする必要はありません。また、多くの場合、Idを使用して正しい要素を見つけることができます。

説明フィールドもモデルに戻して、このフィールドを使用できるようにするのは難しいですか?

もしそうなら、どのように?

4

1 に答える 1

1

説明フィールドもモデルに戻して、このフィールドを使用できるようにするのは難しいですか?

これを行う唯一の方法は、javascriptを使用することです。<option>HTMLには、タグのテキストを送信できるものはありません。値のみがサーバーに送信されます。

したがって、基本的にはonchange、このドロップダウンリストのイベントをサブスクライブし、選択した要素のテキストを取得して、適切な名前の非表示フィールドに詰め込む必要があります。

したがって、フォーム内の適切な名前の非表示フィールド:

@Html.HiddenFor(m => m.Category.Description, new { id = "description" })

次に、ドロップダウンにIDを指定します。

@Html.DropDownListFor(
    m => m.Category.Id, 
    new SelectList(Model.Categories, "Id", "Description"),
    new { id = "category" }
)

そして最後にサブスクライブします:

$('#category').change(function() {
    var description = $(this).find('option:selected').text();
    $('#description').val(description);
});

ただし、私があなたに完全に正直になりたい場合は、これを行わずに、サーバーに送信される選択されたIDを使用して、基になるバックエンドから説明を取得してください。

于 2013-01-10T15:13:00.657 に答える