C# 将数据从视图传递到窗体旁边的控制器';s值

C# 将数据从视图传递到窗体旁边的控制器';s值,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,我正在做的网站的一部分(一个简单的逐圈浏览游戏)要求我将数据从一个视图传递到一个控制器(从DropDownList传递一个外键,并将视图中的另一个整数值作为参数传递给控制器)。接下来,控制器使用这些值将执行传递给另一个控制器 我的问题是,我很难弄清楚MVC如何返回视图中的数据,如何在类型中绑定并将其用作参数。我知道我可以使用动作链接指向我的下一个控制器,但我不知道如何在DropDownList中检索选定的值。或者使用输入按钮,但我不知道返回的值是什么或如何返回的 如果你需要额外的解释或任何令人困

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

我的问题是,我很难弄清楚MVC如何返回视图中的数据,如何在类型中绑定并将其用作参数。我知道我可以使用动作链接指向我的下一个控制器,但我不知道如何在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>

发送视图的控件

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

在ViewModel中,创建三个属性

  • SelectedId
  • 项目列表
  • 您需要返回控制器的其他项目
  • 当您使用Html.BeginForm发回控制器时,模型将被传回。要获取所选下拉列表值,请按以下方式更改语法:

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

    对于需要返回控制器的其他项,可以使用
    @Html.HiddenFor(m=>m.otheritemsthattouneedtogetbackatcontroller)

    Quick-side-note。视图模型不应包含数据访问逻辑。其目的是表示UI或表单提交的状态@sajoshi方向看起来不错,应该给你想要的。PS:喜欢你的jpeg文件在评论中的名称。
        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});
        }