4

我的模型中有一个属性,如下所示:

 public IList<SelectListItem> AllCards { get; set; }

SelectListItem控制器使用数据库中的数据填充属性。

另外,在我看来是@Html.DropDownListFor(m=>m.AllCards,Model.AllCards,"--Select--"). 发布视图期间出现问题。也就是说,onSubmit myModel.AllCards是空的,尽管在下拉列表中选择了一个值。我尝试向模型添加一个新属性,如下所示:

public SelectListItem SelectedCard

然后像这样改变视图:

@Html.DropDownListFor(m=>m.AllCards,Model.SelectedCard,"--Select--")

但它给了我一个错误,说转换不可能,就像那样。

我应该怎么做才能捕获我的下拉列表值,以便在调用视图的 POST 版本后它可以在模型内部?谢谢

PS我知道有十个类似的问题,但没有一个有帮助。

4

4 回答 4

7

这就是我会做的。

你的视图模型可能看起来像这样,并且会有一个卡片列表:

public class CardViewModel
{
     public int CardId { get; set; }

     public IEnumerable<Card> Cards { get; set; }
}

我不知道你的卡有什么属性,但让我发明我自己的:

public class Card
{
     public int Id { get; set; }

     public string Name { get; set; }
}

您的视图将接受此视图模型:

@model YourProject.ViewModels.Cards.CardViewModel

卡片下拉列表的 HTML 标记:

@Html.DropDownListFor(
     x => x.CardId,
     new SelectList(Model.Cards, "Id", "Name", Model.CardId),
     "-- Select --",
     new { id = "Cards" }
)
@Html.ValidationMessageFor(x => x.CardId)

首次加载视图时的操作方法:

public ActionResult YourActionMethod()
{
     CardViewModel viewModel = new CardViewModel
     {
          Cards = cardService.FindAll()
     }

     return View(viewModel);
}

[HttpPost]
public ActionResult YourActionMethod(CardViewModel viewModel)
{
     if (!ModelState.IsValid)
     {
          return View(viewModel);
     }

     // Do what ever you need to do. The selected card's id will now be populated

     return RedirectToAction("List");
}

关于您的 JavaScript 问题,我会建议您提出一个新问题,但我会概述您可以注意的内容。通过使用添加 on change 事件来分隔 JavaScript 和 HTML jQuery(使用任何你想要的)。例如:

<script>

     $(document).ready(function () {
          $("#Cards").change(function () {
               alert('cards value has changed');
          });
     });

</script>

我希望这有帮助。

于 2013-07-11T09:17:52.420 回答
3

将另一个属性添加到您的模型中,该属性与您valueSelectListItems. 例如,如果它是int,请执行以下操作:

public int SelectedCard { get; set; }

然后,改变你的DropDownListFor喜欢:

@Html.DropDownListFor(m => m.SelectedCard, new SelectList(Model.AllCards), "--Select--")

我不确定你为什么使用 aIList<SelectListItem>而不是简单地使用 a SelectList。如果你做后者,那么你不需要new SelectList上面的构造函数调用。

于 2013-07-09T18:14:07.740 回答
1

您没有正确使用 DropDownListFor :

@Html.DropDownListFor(m=>m.Model.SelectedCard, Model.AllCards,"--Select--")

在您的模型中:

   public SelectList AllCards {get; set;}
   public int SelectedCard {get; set;}
于 2013-07-09T18:14:14.767 回答
0

这是解决方案,AJ 帮了我很大的忙,所以谢谢:

 @Html.DropDownListFor(m => m.ChosenCard, Model.AllCreditCards, "--Select--", new { onchange = "GetOtherItem()" } )

其中ChosenCard是类型IEnumerable<SelectListItem>AllCreditCardsIList<SelectListItem>

所以,这是正确的方法。

于 2013-07-10T07:12:03.503 回答