0

我的代码有一些问题,希望有人能帮帮我。这是我正在使用的片段:

[Authorize]
        public ActionResult EventResults(int id)
        {
            List<Event> CompetitionEvents = Event.getEventsByCompetitionId(id);
            ViewBag.CompetitionEvents = CompetitionEvents;
            List<Person> Competitors = Competition.getCompetitorsByCompetitionID(id);
            ViewBag.Competitors = Competitors;
            List<Results> Results = Competition.getCompetitorResultsPairings(CompetitionEvents, Competitors);
            ViewBag.Results = Results;
            ViewBag.OrganizerEmail = Competition.getCompetitionById(id).OrganizerEmail;
            return View();
        }
@model BINC.Models.Results
@using BINC.Models;
@{
    var eventList = ViewBag.CompetitionEvents as List<Event>;
    var competitorList = ViewBag.Competitors as List<Person>;
    var resultList = ViewBag.Results as List<Results>;
}
<h2></h2>
<p>Results:</p>
    @using (Html.BeginForm())
       {
            foreach (var evt in eventList)
            {
                <fieldset>
                    <legend>@evt.activity.Name</legend>
                   <p>Event Description:  @evt.activity.Description</p>
                   @foreach (var competitor in competitorList)
                   {
                       foreach (var result in resultList)
                       {
                           if (result.EventID == evt.id && result.CompetitorEmail == competitor.Email)
                           {
                               <p>Competitor:  @competitor.FirstName @competitor.LastName</p>
                               <p>Score:  @result.Score</p>
                               if (ViewBag.OrganizerEmail.Equals(@User.Identity.Name))
                               {
                                    @Html.LabelFor(model => model.Score, "New Score   ");
                                    @Html.TextBoxFor(model => model.Score, new { maxlength = 10, style = "width:125px" })
                                    <input type="submit" name="submitButton" value="Update" />
                               }
                           }
                       }
                   }
                </fieldset>
            }
       }
[HttpPost]
        public ActionResult EventResults(Results res)
        {
           //stuff
        }

我的问题只是在我的结果对象上设置了分数。例如,当我将值“15”放入文本框中并单击“更新”时,我将 Result 模型对象传递给 httppost 方法,该方法除了我刚刚设置的“分数”字段之外的所有内容都设置为 null进入。

我是否过于复杂了?有没有更简单的方法?

我尝试添加

@Html.HiddenFor(model => model.EventID);
@Html.HiddenFor(model => model.CompetitorEmail);

但这似乎没有任何帮助。

4

2 回答 2

0

您有多个提交按钮,这可能是问题所在,这也不是好的做法

<input type="submit" name="submitButton" value="Update" /> 

在表单末尾只保留一个提交按钮

于 2012-07-15T09:30:33.427 回答
0

基本上——确保将模型传递给视图——并使用 Html 助手(即 TextBoxFor() 和 HiddenFor)

我不认为提交按钮有问题——但可能有帮助的一件事是将模型实际传递给视图。您正在使用 ViewBag 来传递您的数据。将模型传递给 View,您的 Html Helpers 应该生成正确的表单名称,以便模型绑定起作用。

于 2012-07-15T12:39:51.843 回答