为什么在单击提交按钮后更改了值?

时间:2012-02-10 10:22:43

标签: asp.net-mvc

我为2个活动(新输入和编辑)制作了一个动作方法,并且只有一个 查看处理这些活动。 但我不明白无论发生什么活动,动作方法总是认为它是一个新的输入。 我了解到它因为ID始终为0,但问题是,在进行编辑时,在视图中ID是正确的数据ID,但是当我单击提交按钮时,动作方法只是看到ID的0值。

以下是我使用的操作方法:

[HttpPost]
public ActionResult AddAssignment(SateliteSchedule SatSched)
{
    var txt = "";

    if (ModelState.IsValid)
    {
        if (SatSched.ID == 0)
        {
            db.SateliteSchedules.Add(SatSched);
            txt = "{0} has been added!";
        }
        else
        {
            db.Entry(SatSched).State = EntityState.Modified;
            txt = "{0} has been modified!";
        }

        db.SaveChanges();

        Utility utl = new Utility();
        TempData["message"] = string.Format(txt, utl.GetSateliteName(SatSched.SateliteID));

        return RedirectToAction("FormAssignment");
    }
    else
    {
        ViewBag.Message = "ModelState is not Valid!";

        return View("ErrorView");
    }
}

以下是观点:

@using (Html.BeginForm("AddAssignment", "admin", FormMethod.Post))
{
    @Html.ValidationSummary(true)

   <table>
     <tr>
       <td>@Html.LabelFor(m => m.Tanggal)
       </td>
       <td>
           @Html.EditorFor(m => m.Tanggal)
           @Html.ValidationMessageFor(m => m.Tanggal)
       </td>
     </tr>
     <tr>
       <td>@Html.LabelFor(m => m.SateliteID)</td>
       <td>
            @Html.DropDownList("SateliteID", (IEnumerable<SelectListItem>)ViewBag.SatList, "--- Satelite ---")
            @Html.ValidationMessageFor(m => m.SateliteID)
       </td>
     </tr>
     <tr>
       <td>@Html.LabelFor(m => m.WMOnDuty)</td>
       <td>
           @Html.DropDownList("WMOnDuty", (IEnumerable<SelectListItem>)ViewBag.WMList, "--- Worship Manager ---")
           @Html.ValidationMessageFor(m => m.WMOnDuty)
       </td>
     </tr>
     <tr>
       <td>@Html.LabelFor(m => m.SMOnDuty)</td>
       <td>@Html.EditorFor(m => m.SMOnDuty)</td>
     </tr>
     <tr>
       <td>@Html.LabelFor(m => m.WLOnDuty)</td>
       <td>@Html.EditorFor(m => m.WLOnDuty)</td>
     </tr>
     <tr>
       <td>@Html.LabelFor(m => m.MLOnDuty)</td>
       <td>@Html.EditorFor(m => m.MLOnDuty)</td>
     </tr>
     <tr>
       <td>@Html.LabelFor(m => m.SoundMan)</td>
       <td>@Html.EditorFor(m => m.SoundMan)</td>
     </tr>
     <tr>
       <td valign=top>@Html.LabelFor(m => m.Note)</td>
       <td>@Html.TextAreaFor(model => model.Note, new { @class = "memo-text" })</td>
     </tr>
   </table>
    <div>
       <input type="submit" value="Save" />
       @Html.ActionLink("Kembali", "FormAssignment")
    </div>
}

我应该检查什么来解决这个问题?

1 个答案:

答案 0 :(得分:2)

你必须将Id作为隐藏,所以当你进入方法时,模型会将id赋予它(它有意义吗?)。尝试将其放在您的表单中

@Html.HiddenFor(m => m.ID)