删除MVC 5列表中的问题
本文关键字:问题 列表 MVC 删除 | 更新日期: 2023-09-27 18:07:48
最近花了一些时间远离MVC,回到一个旧项目,试图重写我以前做过的代码,但已经从列表中删除一个项目,与EF它很好,但我试图不使用实体框架来管理我的模型数据。我想使用我的模型作为数据库,直到我很高兴提交。
我已经重写了这个问题,以简化它,而不是转储代码负载,当点击删除时,我得到以下错误:
参数字典包含一个非空类型'System '的参数'id'的空条目。在project . views . requestdcontroller中调用方法System.Web.Mvc.ActionResult removerrequested (Int32)。可选参数必须是引用类型、可空类型,或者声明为可选参数。参数名称:parameters
我认为id通常由EF处理,但我认为[key]
会处理这个自动递增-这是可能的排序吗?
希望这是有意义的。动态我并不真正关心,所以理想情况下没有jQuery/java脚本,除非我必须。
代码:
<部分视图/strong>
@model IEnumerable<Project.Models.Allocation>
@using (Html.BeginForm())
{
if (Model != null)
{
foreach (var ri in Model)
{
<div class="ui-grid-c ui-responsive">
<div class="ui-block-a">
<span>
@ri.one
</span>
</div>
<div class="ui-block-b">
<span>
@ri.two
</span>
</div>
<div class="ui-block-c">
<span>
@ri.three
</span>
</div>
<div class="ui-block-d">
<span>
@Html.ActionLink("Delete", "RemoveRequested", new { id = ri.id })
</span>
</div>
</div>
}
}
public class Allocation
{
[Key]
public int? id { get; set; }
[Required]
public string one { get; set; }
[Required]
public string two { get; set; }
[Required]
public string three { get; set; }
}
public class Container
{
[key]
public int? id { get;set; }
[Required]
public List<Allocation> requested { get;set; }
}
控制器动作方法
public ActionResult RemoveRequested(int id)
{
var newContainer = (Container)Session["containerSession"];
if(newAllocation.requested != null)
{
var del = newContainer.requested.Find(m => m.id == id);
newContainer.requested.Remove(del);
}
Session["containerSession"] = newContainer;
return RedirectToAction("Index");
}
我不会有一个可空的键,并添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
属性。
将Allocation
类型更改为:
public class Allocation
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
[Required]
public string one { get; set; }
[Required]
public string two { get; set; }
[Required]
public string three { get; set; }
}
现在将匹配您的action参数。但是,如果您的键为空,则一定有其他问题,它们现在将使用默认值零。
另一种选择是更改操作以接受可空类型作为参数:
public ActionResult RemoveRequested(int? id)
请注意,我也会使用HttpPost
来删除,而不是HttpGet
,因为你目前正在做。