我正在開發一個MVC 4應用程序,並且我遇到了這個問題。參數字典中包含一個空條目,用於不可爲空的類型'System.Int32'的參數
我有一個名爲'FormaFarmaceutica'
的實體,它只有一個描述字段。由於它只有一個字段,創建和編輯視圖使用ajax加載到模式窗口中。模式窗口在同一控制器的索引視圖中定義。
創建沒有問題,當我點擊'添加'按鈕時,模態窗口顯示,並且當我提交時,數據庫中的新條目出現。
在編輯操作中,當我點擊'編輯'按鈕時,模態窗口顯示,我想要編輯的值已經加載。但當我提交表格,我得到這個'參數字典包含一個空的條目參數的非空類型'System.Int32''錯誤。
下面的代碼:
編輯觀點:
@model Dominio.formafarmaceutica
@using (Html.BeginForm("Edit", "FormaFarmaceutica", FormMethod.Post, new { id = "add_form", role = "form" }))
{
@Html.ValidationSummary(true)
<div class = "form-group">
<input type="text" class="form-control" id="descripcion" name="descripcion" value="@Model.Descripcion" />
</div>
<button type="submit" class="btn btn-primary">Guardar cambios</button>
}
模態窗口&腳本,這一觀點被加載:
<div class="modal fade" id="modalAgregar" tabindex="-1" role="dialog" aria- labelledby="agregar" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">Descripcion</h4>
</div>
<div class="modal-body" id="modal">
</div>
</div>
</div>
</div>
<script type="text/javascript" charset="utf-8">
$(function (e) {
forma farmaceutica.$("#editarFormaFarmaceutica").click(function() {
var idForma = $(this).val();
var load = "@Url.Action("Edit", "FormaFarmaceutica")" + "?id=" + idForma.toString();
$("#modal").load(load);
});
});
</script>
控制器:
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
if (Session["Username"] != null)
{
if (user.HasAccess((int)Session["UserID"], (int)Operaciones.FormaFarmaceutica.Editar))
{
try
{
formafarmaceutica f = db.FindSingle<formafarmaceutica>(aux => aux.ID == id && aux.Activo == 1);
if (f != null)
{
f.Descripcion = collection["descripcion"];
db.Update<formafarmaceutica>(f);
Logger.Log.Registrar((int)Operaciones.FormaFarmaceutica.Editar, (string)Session["Username"], f.Descripcion);
return RedirectToAction("Index", "FormaFarmaceutica");
}
else
{
ViewBag.Errors = "Ocurrió un error al guardar los cambios.";
return RedirectToAction("Index", "FormaFarmaceutica");
}
}
catch (Exception e)
{
ViewBag.Errors = "Ocurrió un error al guardar los cambios.";
Logger.Log.Error((int)Operaciones.FormaFarmaceutica.Editar, e.InnerException.Message);
return RedirectToAction("Index", "FormaFarmaceutica");
}
}
else
{
return RedirectToAction("AccessDenied", "Error");
}
}
else
{
return RedirectToAction("AccessDenied", "Error");
}
}
FIX:
表單中缺少一個id字段。我添加了一個帶有id的隱藏輸入。謝謝您的幫助!
@model Dominio.formafarmaceutica
@using (Html.BeginForm("Edit", "FormaFarmaceutica", FormMethod.Post, new { id = "add_form", role = "form" }))
{
@Html.ValidationSummary(true)
<div class = "form-group">
<input type="hidden" class="form-control" id="id" name="id" value="@Model.ID" />
<input type="text" class="form-control" id="descripcion" name="descripcion" value="@Model.Descripcion" />
</div>
<button type="submit" class="btn btn-primary">Guardar cambios</button>
}
在發佈到服務器之前,您是否檢查過什麼idForma(var idForma = $(this).val();)? – 2014-08-28 13:31:17
是的,這是用來加載編輯視圖,工作正常。提交表單是問題。 – diebarral 2014-08-28 13:32:55
看到下面的答案 – 2014-08-28 13:34:28