我在使用http post窗體提交時在模型中丟失一個值時出現問題。模型中的一個變量在http post後變爲空
控制器方法:
[HttpGet]
public ActionResult AddTeam(int id)
{
return PartialView("_AddTeam", ViewModelGenerator.TeamFormModel(id));
}
[HttpPost]
public ActionResult AddTeam(TeamFormModel model)
{
TournamentTeamService.CreateTeam(model);
return RedirectToAction("Index", "Tournament", null);
}
形式模型:
public class TeamFormModel
{
public TeamViewModel Team { get; set; }
public TournamentViewModel Tournament { get; set; }
public List<PlayerViewModel> Players { get; set; }
}
這個功能是從控制器調用,它會創建表單模型的新實例,並從數據庫中獲取的比賽並將其放入視圖模型中
public static TeamFormModel TeamFormModel(int id)
{
var _db = new DbContext();
var model = new TeamFormModel();
var tempModel = new TournamentViewModel();
var temp = (from t in _db.tournament
where t.Id == id
select t).SingleOrDefault();
tempModel.Id = temp.Id;
tempModel.Name = temp.Name;
tempModel.SignupStartDate = temp.SignupStartDate;
tempModel.SignupEndDate = temp.SignupEndDate;
tempModel.StartDate = temp.StartDate;
tempModel.EndDate = temp.EndDate;
tempModel.Description = temp.description;
tempModel.TournamentType = temp.TournamentType;
model.Players = new List<PlayerViewModel>();
model.Tournament = tempModel;
return model;
}
下面是視圖,代碼與th玩家列表的e個輸入缺失,這是因爲它通過jquery追加到player-forms div中,並且它完美地工作,所以在這種情況下我沒有考慮它。
@model Context.ViewModels.TeamFormModel
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
@using (Html.BeginForm("AddTeam", "Tournament", FormMethod.Post, new { enctype = "multipart/form-data", @class = "form-horizontal" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<h2>Registering a team to @Model.Tournament.Name </h2>
<div class="control-group">
@Html.LabelFor(model => model.Team.Name)
<div class="control">
@Html.EditorFor(model => model.Team.Name)
</div>
<a class="add-player-form" href="javascript:void(0)">Add a player</a>
<div id="player-forms">
</div>
</div>
<div class="control-group">
<div class="control" style="clear: both;">
<input type="submit" value="Register" />
</div>
</div>
}
之前,我提交這種形式下,TeamFormModel是完全成立,被插入所有的值,我只需要知道的一切保存到數據庫中。但是,當它返回到控制器時,TeamFormModel中的聯賽變量爲空。所以當我將它發送到一個函數,它將其更改爲Db模型並將其提交給db時,每次都會失敗。
我知道有些方法可以解決問題,比如只保留錦標賽的ID而不是整個模型,然後在提交表單後從數據庫中獲取它,但是它確實讓我誤以爲它的行爲如此。
我在這裏沒有找到關於這個特定問題的任何東西在stackoverflow,有幾個類似的問題,但沒有任何表現自己的方式相同。
是比賽id集? –
是的,發佈後不會改變。 – grimurd
哪裏有控件來繼承錦標賽對象? –