【问题标题】:The parameters dictionary contains a null entry for parameter '_id' of non-nullable type 'System.Int32'参数字典包含不可为空类型“System.Int32”的参数“_id”的空条目
【发布时间】:2016-08-30 21:13:48
【问题描述】:

(这是一个简单的电话簿项目)我想删除列表中的一行(笔记本中的联系人),当用户按下删除按钮时,我想显示它的信息并得到用户的确认 这是查看代码

    @model Project1.Models.EF_Model.Phone_book
@{
    ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<div>
    <h4>Product</h4>
    <hr />
    <dl class="dl-horizontal">
        <tr>
        <dt>
            @Html.DisplayNameFor(model => model.First_Name)
        </dt>
        <td>
            @Html.DisplayFor(model => model.First_Name)
        </td>
        <dt>
            @Html.DisplayNameFor(model => model.Last_Name)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Last_Name)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Number)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Number)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Email)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Email)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.Address)
        </dt>
        <dd>
            @Html.DisplayFor(model => model.Address)


   </dd>
    </tr>
    </dl>
  @using (Html.BeginForm())
     {
        @Html.AntiForgeryToken()
        <div class="form-actions no-color">
        <input type="submit" value="Delete" class="btn btn-default" /> |
            @Html.ActionLink("Back to List", "Index")
        </div>
    }
</div>

在我的控制器中,我检查了基础知识并将 id 发送到模型以将其删除

[HttpGet]
public ActionResult Delete(int? _id)
{
    return View();
}
#endregion

#region [- Post -]

[HttpPost]
public ActionResult Delete(int _id)
{
    if (ModelState.IsValid)
    {
        Ref_ViewModel = new ViewModel.ViewModel();
        Ref_ViewModel.Delete(_id);
    }
    else
    {
        ViewBag.Massage = "Choose a Contact";
    }
    return View();
} 

如何在确认视图中显示我选择的数据?

当我按下按钮删除它时 我也收到了这个错误

参数字典包含“Project1.Controllers.HomeController”中方法“System.Web.Mvc.ActionResult Delete(Int32)”的不可为空类型“System.Int32”的参数“_id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数

当我按下按钮删除它时,我猜它返回空值或者我必须对 routconfig 做一些事情,请帮助我,我正在工作 2 天(你应该知道我)刚开始学习mvc)

【问题讨论】:

    标签: c# html razor controller asp.net-mvc-5


    【解决方案1】:

    MVC 告诉您,您的方法采用非空参数 int _id 并且未提供任何值。这意味着当数据发送到 Web 服务器时,表单集合不包含名为 _id 的值。

    当您以 HTML 格式提交表单时,默认情况下唯一发送到服务器的数据是元素。因此,为了将_id 值发送到服务器,您可以在表单中创建一个名称为_id 的元素。

    MVC 具有帮助函数,可根据您的视图模型为您创建输入。 @Html.HiddenFor(model =&gt; model._id).

     @using (Html.BeginForm())
     {
        @Html.AntiForgeryToken()
        <div class="form-actions no-color">
        @Html.HiddenFor(model => model._id)
        <input type="submit" value="Delete" class="btn btn-default" /> |
            @Html.ActionLink("Back to List", "Index")
        </div>
    }
    

    祝你学习 MVC 好运。我鼓励您尝试此处的教程。 http://www.asp.net/mvc/overview/getting-started/introduction/getting-started

    【讨论】:

      【解决方案2】:

      您正在提交表单,并且您的操作标记为 HttpPost,因此返回到 mvc 的是 Project1.Models.EF_Model.Phone_book 对象。

      您的视图中没有任何内容告诉控制器它应该获取一个 _id 参数,因此当 Mvc 绑定参数时,它不会将任何内容绑定到 _id。

      要解决这个问题,请参阅this 答案,了解将 _id 传回控制器的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多