我正在开发一个MVC 4应用程序,我遇到了这个问题。
我有一个名为'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>
}
模态窗口&amp;加载此视图的脚本:
<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>
}
答案 0 :(得分:2)
您编辑帖子操作的定义是:
public ActionResult Edit(int id, FormCollection collection)
然而,在您的编辑视图中,您的表单中没有任何内容可以绑定到id参数。
答案 1 :(得分:0)
由于jQuery.load
是一种get方法,因此您需要将操作HttpMethod
更改为HttpGet
。这可能会解决问题。
答案 2 :(得分:0)
好的......
您正在使用JQuery.load(...)... http://api.jquery.com/load/有效执行get请求,但操作是Post操作
使用jQuery post请求或将操作标记为[HttpGet]。你也期待FormCollection这一事实表明你想做一个post ergo它应该是一个jQuery帖子。 http://api.jquery.com/jquery.post/