У меня возникла проблема с моей моделью, потерявшей одно из своих значений при отправке в форме сообщения по почте.Одна переменная в модели становится пустой после http сообщения
Методы контроллера:
[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;
}
Вот вид, код с номером e входов для списка игроков отсутствует, это потому, что оно добавлено в форму div игроков через jquery и работает отлично, поэтому я не считал это актуальным в этом случае.
@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.
Я знаю, что существует проблема вокруг проблемы, как только сохранение идентификатора турнира вместо всей модели, а затем получение его из db после отправки формы, но это действительно меня беспокоит, что он ведет себя таким образом.
Я не смог найти что-либо по этой конкретной проблеме здесь, в stackoverflow, было несколько похожих вопросов, но ничего, что представляло его сам таким же образом.
- идентификатор турнира? –
Да, после публикации ничего не меняется. – grimurd
где элементы управления для переноса объекта турнира? –