删除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");
        }

删除MVC 5列表中的问题

我不会有一个可空的键,并添加[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,因为你目前正在做。