私がやっているウェブサイトの一部(単純なturn-turn-turnブラウザゲーム)では、ビューからコントローラにデータを渡す必要があります。 DropDownListから、ビューの別の整数値をコントローラへの引数として渡します)。次に、コントローラはこれらの値を使用して別のコントローラに実行を渡します。フォームの値と一緒にビューからコントローラにデータを渡す
私の問題は、MVCがビュー内のデータを返し、内部の型をバンドルしてパラメータとして使用する方法を考え出すことに問題があることです。私は私の次のコントローラーを指すアクションリンクを使用することができますが、DropDownListで選択された値を取得する方法がわかりません。それは、または入力ボタンを使用していますが、私はどのように値が返されるのかわかりません。
説明が必要な場合や何かが混乱している場合は教えてください。
ビューモデルを受信カミソリのビュー、以下に定義する:
は、ここに私のコードです。
@model BattleForLurnia_MVC.Controllers.ChooseCharacterViewModel
@{
ViewBag.Title = "ChooseCharacter";
}
<h2>Choose Your Character</h2>
<fieldset>
<legend>Choose your fighter !</legend>
<div class="display-label">Your characters :</div>
<div class="display-field">
@Html.DropDownList("CharactersList", String.Empty)
</div>
@* Here is the part that returns the values, either an ActionLink or
an Input button.*@
</fieldset>
私のViewModelはビュー
public class ChooseCharacterViewModel
{
Battle_For_LurniaEntities db = new Battle_For_LurniaEntities();
public Player player { get; set; }
public Character targetCharacter { get; set; }
public ChooseCharacterViewModel(string playerUsername, Character opponent)
{
player = db.Players.Single(plr => plr.Username == playerUsername);
targetCharacter = opponent;
}
public ChooseCharacterViewModel(){}
}
に表示
public ActionResult ChooseCharacter(int targetCharacter_ID)
{
Character targetChar = db.Characters.Single(chr => chr.ID_Character == targetCharacter_ID);
ChooseCharacterViewModel chooseCharacter = new ChooseCharacterViewModel(Session["Username"].ToString(), targetChar);
// Using LINQ to get characters owned by the current player. Fuckyeah.jpg =D
IEnumerable<Character> blabla = from VAR in db.Characters
where VAR.FK_Player_ID == chooseCharacter.player.ID_Player
select VAR;
ViewBag.CharactersList = new SelectList(blabla, "ID_Character", "Name");
return View(chooseCharacter);
}
そして最後に送信のcontrolerに合格私のビューでデータを受信し、別のビューを送信するコントローラ。あなたのViewModelで
[HttpPost]
public ActionResult ChooseCharacter(int FK_Character_ID, Character targetCharacter)
{
Character sourceCharacter = db.Characters.Single(chr => chr.ID_Character == FK_Character_ID);
return RedirectToAction("Fight", new {SourceCharacter = sourceCharacter, TargetCharacter = targetCharacter});
}
クイックサイドノート。ビューモデルにデータアクセスロジックを含めることはできません。その目的は、UIまたはフォーム提出の状態を表すことです。 @ sajoshiの指示は大丈夫だと思っています。 PS:コメントの中であなたのjpegファイルの名前が大好きです。 – Roman