2013-05-14 2 views
3

У меня возникла проблема с моей моделью, потерявшей одно из своих значений при отправке в форме сообщения по почте.Одна переменная в модели становится пустой после 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, было несколько похожих вопросов, но ничего, что представляло его сам таким же образом.

+0

- идентификатор турнира? –

+0

Да, после публикации ничего не меняется. – grimurd

+0

где элементы управления для переноса объекта турнира? –

ответ

3

вы должны установить что-то вроде этого

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

что-то есть, чтобы сохранить стоимость модели, которая была передана в поле зрения, а точка зрения оказанной, это будет передать значение обратно в контроллер на пост

+0

Это было отмечено Дэйвом А в предыдущем комментарии. Отмечая это как ответ, так как я не могу его пометить. Спасибо за помощь. – grimurd

Смежные вопросы