2011-12-06 15 views
0

私がやっているウェブサイトの一部(単純な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}); 
    } 
+3

クイックサイドノート。ビューモデルにデータアクセスロジックを含めることはできません。その目的は、UIまたはフォーム提出の状態を表すことです。 @ sajoshiの指示は大丈夫だと思っています。 PS:コメントの中であなたのjpegファイルの名前が大好きです。 – Roman

答えて

2

、3つのプロパティ

  1. を作成するには、モデルをHtml.BeginFormを使用して戻ってあなたのコントローラに投稿するとき
  2. ListOfItems
  3. OtherItemsThatYouNeedToGetBackAtController

をSelectedId返されます。以下のように構文を変更し、選択したドロップダウン値を取得するために:

をHtml.DropDownListFor @(M => m.SelectedId、新しいSelectListの(Model.ListofItems))

をOtherItemsThatYouNeedToGetBackAtControllerために、あなたは を使用することができます@ Html.HiddenFor(m => m.OtherItemsThatYouNeedToGetBackAtController)

関連する問題