2013-04-02 71 views
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; } 
    ... 
} 

OfferCategory:

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。我该如何做到这一点?

回答

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.OfferCategory.Id,而不是模型=> model.OfferCategory

+0

嗯,这是一个有趣的想法。我会查一下。 – Maris

+0

Thx很多!这个工作! – Maris

-1

您的问题是,您在下拉列表中指定“model => model.OfferCategory”,它会生成接近'select name =“model.OfferCategory”'的html。当表单发布到您的操作“AddOffer(Offer Offer)”时,asp.net mvc模型绑定器会尝试创建OfferCategory对象,但它不能这样做,因为它只知道类别ID。你需要做的是改变你下拉列表的方式: @ Html.DropDownListFor(model => model.OfferCategory.Id,(IEnumerable)ViewBag.OfferCategories)。完成后,您将获得使用Id属性填充的OfferCategory对象。 我希望这能帮到你。

+0

你能给一些代码我应该如何改变我在视图中创建dropdownList的方式?我明白什么是isue,但我找不到解决方法 – Maris

+0

我知道这种方式:我可以将SelectedCategoryId添加到我的'Offer'实体和'AddOffer'处理程序中,以通过此ID获取OfferCategory。但是,这是正确的方式? – Maris

+0

没有解释。 - – Maris

相关问题