0

MVC3 では、DropDownListFor を使用する場合、最初のパラメーターが文字列である必要がありますか? 私は次の設定をしています:

@Html.DropDownListFor(m => m.MyListItemId, Model.MyListItems, 
    new Dictionary<string, object> 
    { 
        { "style", "width:120px" }, 
        { "data-type", "myList" } 
    })

m.MyId はビューモデルの int です。ドロップダウン リストで選択したアイテムを変更し、レンダリングされた html を検査すると、「選択された」プロパティが新しく選択されたアイテムに設定されないという問題があります。jquery clone 関数を使用してその行をコピーしているため、これは問題であり、新しい選択項目を含むリストを新しい行にコピーする必要があります。アイデア?

更新- ビューモデルのプロパティを文字列に変更しても違いはありません。これは mvc dropdownlistfor のバグですか? 同様の問題に関するかなりの数の投稿を読みましたが、この場合に機能する解決策が見つからないようです。これは私のリストが私のコードでどのように設定されているかです:

var myListItems = _myRepository.GetAll();
model.MyListItems = new SelectList(myListItems, "Id", "Name", lineItem.myListItemId);
model.MyListItemId = lineItem.myListItemId;

lineItem がこのメソッドに渡される場所

4

1 に答える 1

0

いいえ、選択された値のプロパティは文字列である必要はなく、int でもかまいません。値が文字列に変換可能である限り、機能するはずです (したがって、選択された値の型は Guid、int、bool などである可能性があります)。

ページのルートに、選択した値モデル プロパティと同じ名前のルート パラメーターがある場合に問題が発生することがあります。たとえば、次のように考えてください。

route: "/establishments/{establishmentId}/edit"

モデル:

public class MyViewModel
{
    public int EstablishmentId { get; set; }
    public SelectListItem[] Establishments { get; set; }
}

意見:

@Html.DropDownListFor(m => m.EstablishmentId, Model.Establishments)

このコードでは、ドロップダウン リストの選択された値は常に、ルートにある EstablishId になります。したがって、ルートが /stations/12/edit の場合、値 12 がドロップダウンで選択されます。ルート パラメーターとモデル プロパティの大文字と小文字が一致しなくてもかまいません。

MVC ソース コードをダウンロードし、DropDownListFor (MyDropDownListFor という名前) の独自のコピーを作成し、コードをステップ実行して何が起こったかを確認することで、これを理解しました。MVC3 でまだ問題がある場合は、同じことを行うことをお勧めします。これがサーバー コードの問題なのか、jquery クローンの問題なのかを判断する必要があります。

于 2012-05-03T13:24:56.793 に答える