gpt4 book ai didi

asp.net-mvc - 模型中的一个变量在 http post 后变为空

转载 作者:行者123 更新时间:2023-12-02 00:09:06 24 4
gpt4 key购买 nike

我遇到一个问题,我的模型在以 http post 表单提交时丢失了其中一个值。

Controller 方法:

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

这个函数是从 Controller 调用的,它创建了一个新的表单模型实例,并从数据库中获取锦标赛并将其放入 View 模型中

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

这是 View ,缺少播放器列表输入的代码,这是因为它是通过 jquery 附加到播放器表单 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 已完美设置,所有值均已插入,我只需要将所有内容保存到数据库即可。但是,当它返回到 Controller 时,TeamFormModel 中的锦标赛变量为空。因此,当我将它发送到将其更改为 Db 模型并将其提交给 db 的函数时,每次都会失败。

我知道有一些方法可以解决这个问题,比如只保留锦标赛的 ID 而不是整个模型,然后在提交表单后从数据库中获取它,但它的行为方式确实让我很烦恼。

我无法在 stackoverflow 上找到有关此特定问题的任何信息,有一些类似的问题,但没有任何问题以相同的方式呈现。

最佳答案

你必须这样设置

@Html.HiddenFor(x => x.TournmentID);

某些东西必须保留在呈现 View 时传递到 View 中的模型的值,这将在发布时将值传递回 Controller

关于asp.net-mvc - 模型中的一个变量在 http post 后变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16554371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com