1

Razor を使用した ASP.NET MVC3 プロジェクトがあります。次のエンティティがあります:

オファー:

public class Offer
{
    public Int32 Id { get; set; }

    public String Name { get; set; }

    public DateTime Added { get; set; }

    public String Description { get; set; }

    public Decimal Price { get; set; }

    public String Address { get; set; }

    public virtual OfferCategory OfferCategory { get; set; }
    ...
}

オファーカテゴリ:

public class OfferCategory
{
    public Int32 Id { get; set; }

    public String Name { get; set; }

    public String Description { get; set; }

    public virtual List<Offer> Offers { get; set; }

    ...
}

DropDownListFor(OfferCategory) を使用して新しいオファーを追加するためのフォームを作成しようとしています。この dropDownList には、db 内のすべての既存の offerCategories が表示されます。ここで私はどこまで行きますか:

コントローラーの AddOffer アクション:

var categories = _context.OfferCategory.ToList();
List<SelectListItem> OfferCategories = new List<SelectListItem>();
foreach (var offerCategory in categories)
{
    OfferCategories.Add(new SelectListItem() { Selected = false, Text =  offerCategory.Name, Value = offerCategory.Id.ToString()});
}
ViewBag.OfferCategories = OfferCategories;

そして、ここにビューがあります:

 //... A lot of things
<div class="editor-label">
    @Html.LabelFor(model => model.OfferCategory)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model=>model.OfferCategory,  (IEnumerable<SelectListItem>)ViewBag.OfferCategories)
</div>
//... A lot of things

フォームにすべての OfferCategories も表示されますが、送信ボタンをクリックすると、POST AddOffer(Offer offer) ハンドラーがフォームで選択された OfferCategory を取得しませんでした。どうすればそれを機能させることができますか?

4

2 に答える 2

0

あなたはこれを持っています:

<div class="editor-label">
    @Html.LabelFor(model => model.OfferCategory)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model=>model.OfferCategory,  (IEnumerable<SelectListItem>)ViewBag.OfferCategories)
</div>

に変更する必要があります

<div class="editor-label">
    @Html.LabelFor(model => model.OfferCategory)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model=>model.OfferCategory.Id,  (IEnumerable<SelectListItem>)ViewBag.OfferCategories)
</div>

model=>model.OfferCategory.Id の代わりに model=>model.OfferCategory.Id に注意してください

于 2013-04-02T13:07:48.770 に答える