将数据从一个视图传递到一个控制器与窗体's值

本文关键字:一个 窗体 数据 视图 控制器 | 更新日期: 2023-09-27 18:16:48

我正在做的网站的一部分(一个简单的逐回合浏览器游戏)要求我从视图传递数据到控制器(从下拉列表传递外键和视图中的另一个整数值作为控制器的参数)。接下来,控制器使用这些值将执行传递给另一个控制器。

我的问题是,我有麻烦弄清楚MVC如何返回我的视图和bundle内部类型的数据,并使用它们作为参数。我知道我可以使用一个操作链接指向我的下一个控制器,但我不知道如何检索DropDownList中的选定值。或者使用输入按钮,但我不知道返回的值是什么或如何返回。

如果你需要额外的解释或任何令人困惑的地方,请告诉我。

下面是我的代码:

Razor中的视图,接收视图模型,定义如下。

@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传递给View

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

将数据从一个视图传递到一个控制器与窗体's值

在ViewModel中创建三个属性

  1. SelectedId
  2. ListOfItems
  3. OtherItemsThatYouNeedToGetBackAtController

当你使用Html返回到控制器时。BeginForm,模型将被传回。要获取选中的下拉列表值,更改语法如下:

@Html.DropDownListFor (m => m。SelectedId, new SelectList(Model.ListofItems))

对于otheritemsthatyouneedtotbackatcontroller,你可以使用@Html.HiddenFor (m => m.OtherItemsThatYouNeedToGetBackAtController)