参数字典包含非可空类型“System.Int32”参数的空条目

时间:2014-08-28 13:26:10

标签: c# jquery ajax asp.net-mvc asp.net-mvc-4

我正在开发一个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">&times;</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>

    }

3 个答案:

答案 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/