将数据从一个视图传递到一个控制器与窗体'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});
}
在ViewModel中创建三个属性
- SelectedId
- ListOfItems
- OtherItemsThatYouNeedToGetBackAtController
当你使用Html返回到控制器时。BeginForm,模型将被传回。要获取选中的下拉列表值,更改语法如下:
@Html.DropDownListFor (m => m。SelectedId, new SelectList(Model.ListofItems))
对于otheritemsthatyouneedtotbackatcontroller,你可以使用@Html.HiddenFor (m => m.OtherItemsThatYouNeedToGetBackAtController)