2011-12-06 19 views
0

我正在做的網站的一部分(一個簡單的每回合轉瀏覽器遊戲)要求我將數據從視圖傳遞到控制器(傳遞一個外鍵從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> 

我的視圖模型傳遞給視圖

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); 
    } 

最後的但是控制器控制器在我的視圖中接收數據併發送另一個視圖。

[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

在您的視圖模型,創建三個屬性

  1. SelectedId
  2. LISTOFITEMS
  3. OtherItemsThatYouNeedToGetBackAtController

當你回發到你的控制器使用Html.BeginForm,模型將被傳回。爲了得到選定的下拉值而改變,如同下面的語法:

@ Html.DropDownListFor(M => m.SelectedId,新的SelectList(Model.ListofItems))

對於OtherItemsThatYouNeedToGetBackAtController,您可以使用 @ Html.HiddenFor(m => m.OtherItemsThatYouNeedToGetBackAtController)

相關問題