4

次のように、モデル内にプロパティがあります。

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

SelectListItemプロパティは、データベースからのデータを使用して、コントローラによってで満たされています。

また、私の見解では@Html.DropDownListFor(m=>m.AllCards,Model.AllCards,"--Select--"). ビューの POST 中に問題が発生します。つまり、Model.AllCardsドロップダウンリスト内で選択された値がありますが、onSubmit my は空です。次のように、モデルに新しいプロパティを追加しようとしました。

public SelectListItem SelectedCard

次に、次のようにビューを変更します。

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

しかし、変換できないというエラーが表示されます。

ビューの POST バージョンが呼び出されたら、ドロップダウンリストの値をキャッチしてモデル内に入れるにはどうすればよいですか? ありがとうございました

PS私は10個の同様の質問があることを知っていますが、どれも役に立ちません.

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

valueのパラメータと同じタイプの別のプロパティをモデルに追加しますSelectListItems。たとえば、 の場合は、次のようintにします。

public int SelectedCard { get; set; }

次に、DropDownListFor好きなように変更します:

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

IList<SelectListItem>単純に を使用する代わりに を使用している理由がわかりません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 に答える