如何在mvc中的同一个表中的对象之间创建关系?

时间:2015-07-24 16:31:17

标签: asp.net-mvc database asp.net-mvc-4

我有一张桌子,里面有很多列。其中一个列我命名为" LinkedTo"。在我看来,我希望能够有一个按钮,说明" Flip Over"这将显示卡片背面的卡片信息(就像在现实生活中一样)。我不希望将正面和背面的信息放在同一记录中的原因是搜索功能以及我希望细节视图显示的方式。在我的编辑视图中,我想显示一个下拉列表,该列表仅显示带有" Flip"标记为true的列(使列表更短)。保存时,该下拉列表中的CardID将保存到" LinkedTo"柱。然后我希望能够在详细视图上的链接/按钮中调用该CardID,如上所述。无论如何,我尝试创建一个下拉列表,我得到歧义错误或没有任何显示。如果我的模型已经知道所有卡片,那么在编辑一张特定卡片时如何让它显示已过滤的卡片列表?有更简单的方法吗?

我在控制器中尝试了这个:

ViewBag.Card_ID = new SelectList(db.Cards.Where(w => w.Flip == true), "CardID", "Title");

这在我看来:

@Html.DropDownListFor(model => model.Cards.CardID, ViewBag.CardID as SelectList)

这是我的编辑ViewModel:

public class EditCardViewModel
    {

        public Card Cards { get; set; }
        public HttpPostedFileBase ImageUpload { get; set; }
        public int[] LinkedCard { get; set; }
        public IEnumerable<SelectListItem> Abilities { get; set; }
        public int[] SelectedAbilities { get; set; }
        public IEnumerable<SelectListItem> Rarities { get; set; }
        public int SelectedRarities { get; set; }
        public IEnumerable<SelectListItem> MainTypes { get; set; }
        public int SelectedMainTypes { get; set; }
        public IEnumerable<SelectListItem> SubTypes { get; set; }
        public int SelectedSubTypes { get; set; }
        public IEnumerable<SelectList> CardSets { get; set; }
        public int SelectedCardSets { get; set; }
        public Rarity Rarity { get; set; }
        public MainType MainType { get; set; }
        public SubType SubType { get; set; }
        public CardSet CardSet { get; set; }

        public EditCardViewModel() { }
        public EditCardViewModel(Card card)
        {
            Cards = card;

        }
}

非常感谢任何帮助。 :)

1 个答案:

答案 0 :(得分:1)

在POST上,DropDownListFor部分会将结果绑定到您告诉它的字段。现在你将它设置为model.Cards.CardId。如果您希望将该选择绑定到“LinkedTo”属性,则将其更改为该选项。另外我注意到你传入“ViewBag.CardId”而不是“ViewBag.Card_ID”,你将其显示为用列表设置的变量。

@Html.DropDownListFor(model => model.Cards.LinkedTo, ViewBag.Card_ID as SelectList)

Here is a demo