1

Html.DropDownList(string NameSelectListInViewData)メソッドを使用してDropDownを作成します。これにより、正しい値で有効なSelect入力が生成されます。そして、すべてが順調です。

ただし、送信時に、ソースSelectListの値はバインドされません。

ケース: ViewData.SearchBag.FamilyCodes:

public SelectList FamilyCodes { get; set; }

ドロップダウンを生成するHTML:

<%=Html.DropDownList("SearchBag.FamilyCodes")%>

生成されたhtml:

<select id="SearchBag.FamilyCodes" name="SearchBag.FamilyCodes">
    <option value=" ">Any</option>
    <option value="A">BLUE</option>
    <option value="B">BLACK</option>
    <option value="C">BEIGE</option>
    <option value="G">GREEN</option>
    <option value="O">ORANGE</option>
    <option value="P">PURPLE</option>
    <option value="R">RED</option>
    <option value="S">GRAY</option>
    <option value="U">BROWN</option>
    <option value="W">WHITE</option>
    <option value="Y">YELLOW</option>
</select>

私のコントローラーには、パラメーターsearchBagを使用したアクションがあります。

public ActionResult AdvancedSearch(SearchBag searchBag) { 
    //Do Stuff with parameters in searchBag
    return View("AdvancedSearch", searchViewData);
}

他のすべてのフィールドは正常にバインドされますが、選択ボックスのみはバインドされません。何か案は?

更新
将来の読者のために、このブログ投稿を読む価値があるかもしれません:http: //haacked.com/archive/0001/01/01/model-binding-to-a-list.aspx

4

4 に答える 4

0

「SearchBag.FamilyCodes」は有効なHTMLIDですが、フレームワークは各フォームアイテムを同じ名前の対応するパラメーターにマップしようとするため、パラメーター名にピリオドを含めることはできません。コントロールに別のIDを割り当てる場合(Html.DropDownListメソッドの異なるオーバーロード)、それは通過しますか?

于 2008-11-17T11:35:06.610 に答える
0

FamilyCodes のタイプを SelectList から string に変更する必要があると思います。

public string FamilyCodes { get; set; }

次に送信すると、FamilyCodes の値はドロップダウン リストから選択された値になります。現在のプロジェクトにこれらのいくつかがあり、問題はありません。

于 2009-01-02T17:40:09.787 に答える
0

昨日、選択リストで同様の問題が発生した場合、リストは正常に生成されますが、UpdateModel では失敗します =- バインドされていませんか?

そして、パラメーターリストで答えを見つけました...

SelectList (
Collection - items to use in the  drop down,
ValueField - ie the primarykey as a String,
NameField  - ie the name of the thing as a String,
SelectedValue -  which is the passed in current objects FK relationship)

だから私にとって...

Country = new SelectList(db.Countries, "pkCountry", "CountryName",address.fkCountry);

私はViewModelアプローチを使用しています-そしてこれをビューモデルのコンストラクターに持っています...

public AddressCountryViewModel(){
public SelectList Countrys {get; private set;}
public AddressCountryViewModel(Address address)
{
     Countrys = new SelectList(db.Countries, "pkCountry", "CountryName",address.fkCountry);
}

次に、コントローラーの編集アクションで値を取得し、更新中のオブジェクトに割り当てます...

address.fkCountry = Convert.ToInt32(collection["fkCountry"]);
于 2009-08-03T09:55:55.100 に答える
0

SearchBag は、html では小文字にする必要があります (SearchBag ではなく searchBag)

于 2009-01-02T01:55:46.397 に答える