![](/img/trans.png)
[英]Passing message in ViewBag from controller to view in ASP.Net MVC
[英]asp.net mvc 5 - Passing a ViewBag item back to the controller
我試圖將ViewBag項目從我的視圖傳遞回該視圖的post方法,但遇到了困難。
這是我的方法的簡化版本:
public ActionResult CreateGame(int id)
{
var selPlayer = db.Players.Find(id);
if (selPlayer == null)
{
return HttpNotFound();
}
ViewBag.SelPlayerId = selPlayer.PlayerID;
PlayerGame newGame = new PlayerGame ();
return View(newGame);
}
[HttpPost]
public ActionResult CreateGame(PlayerGame newGame)
{
newGame.GameTitle = newGame.GameTitle;
newGame.GameNotes = newGame.GameNotes;
newGame.PlayerID = newGame.PlayerID;
return RedirectToAction("PlayerView");
return View(newGame);
}
這是我的視圖的簡化版本:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.GameTitle)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.GameTitle)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.GameNotes)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.GameNotes)
</div>
@Html.HiddenFor(model => model.PlayerID, new { PlayerID = ViewBag.SelPlayerId })
<p>
<input type="submit" value="Submit Game" class="btn btn-info" />
</p>
</fieldset>
</div>
}
在POST方法中,您可以看到我正在嘗試將PlayerID設置為等於我作為ViewBag.SelPlayerID傳遞的播放器ID,但是當我查看在調試器中傳遞的值時,ID始終等於0這不正確,因為我要測試的播放器的ID為1。
我的問題是,如何將正在創建的新游戲的玩家ID設置為與我通過的玩家ID相同,作為ViewBag項,或者是否有一種更簡單的方法被我忽略了。
注意:玩家ID是我的玩家游戲模型中的外鍵:
//Foreign Key for Player
public int PlayerID { get; set; }
[ForeignKey("PlayerID")]
public virtual Player Player { get; set; }
您在@Html.HiddenFor()
方法中使用new { PlayerID = ViewBag.SelPlayerId }
正在設置html屬性,而不是屬性的值。
如果您檢查html,則生成的將是
<input type="hidden" name="PlayerID" PlayerID="1" value="0" />
更改您的GET方法以設置模型中屬性的值(並刪除ViewBag
屬性)
PlayerGame newGame = new PlayerGame() { PlayerID = selPlayer.PlayerID };
return View(newGame);
並在視圖中使用
@Html.HiddenFor(m => m.PlayerID)
這個:
@Html.HiddenFor(model => model.PlayerID, new { PlayerID = ViewBag.SelPlayerId })
正在創建綁定到model.PlayerID
的隱藏元素,但是使用PlayerID
的自定義Html屬性,您將獲得0
因為那是int
的默認值,並且未在模型上進行設置。
基於您的(簡化的)代碼示例,您應該能夠在控制器上的get操作中將模型PlayerID
設置為所選值:
newGame.PlayerID = selPlayer.PlayerID
接着
@Html.HiddenFor(m => m.PlayerID)
如果由於某種原因您必須使用ViewBag
,並且不能像上面那樣在模型上填充它,則可以使用@Html.Hidden
來確保返回該值。
@Html.Hidden("PlayerID", ViewBag.SelPlayerId)
將導致:
<input type="PlayerID" value="1" />
哪個模型應綁定回模型。 如果這不是一個選擇,而是要手動進行,則可以將第一個參數更改為“ SelectedPlayerID”,然后可以在控制器后操作中從“ Request
中退出。
只是試圖在CSHTML視圖page.On回傳此使用viewbag alone.Set隱藏式元素你會得到你的argument.This您的玩家ID將工作,如果你使用的是輸入型提交
<input type="hidden" id="PlayerID" name="PlayerID" value="@ViewBag.SelPlayerId"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.