C# 删除MVC 5列表中的问题

C# 删除MVC 5列表中的问题,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,最近,我花了一些时间远离MVC,回到一个旧项目,尝试重新编写我以前做过的代码,但在从列表中删除一项时出现了问题,使用EF很好,但我尝试不使用实体框架来管理我的模型数据。我想使用我的模型作为数据库,直到我高兴地提交 我重新编写此问题是为了简化它,而不是转储大量代码,当单击“删除”时,我得到以下错误: 参数字典包含“Project.Views.requestedController”中“System.Web.Mvc.ActionResult RemoveRequested(Int32)”方法的非nu

最近,我花了一些时间远离MVC,回到一个旧项目,尝试重新编写我以前做过的代码,但在从列表中删除一项时出现了问题,使用EF很好,但我尝试不使用实体框架来管理我的模型数据。我想使用我的模型作为数据库,直到我高兴地提交

我重新编写此问题是为了简化它,而不是转储大量代码,当单击“删除”时,我得到以下错误:

参数字典包含“Project.Views.requestedController”中“System.Web.Mvc.ActionResult RemoveRequested(Int32)”方法的非null类型“System.Int32”的参数“id”的null条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数

我认为id通常由EF处理,但我认为
[key]
会将其处理为自动递增-这可以排序吗

希望这是有意义的。我并不真正关心动态,因此理想情况下,除非我必须这样做,否则没有jQuery/java脚本

代码:

局部视图

@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>
        }
    }

我不会使用可为空的键并添加
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
属性

更改您的
分配
类型将其更改为:

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; }
}
这将与您的操作参数匹配。 但是,如果您的密钥为null,则必须有其他问题,并且它们现在将使用默认值零

另一个选项是更改操作以接受可为null的类型作为参数:

public ActionResult RemoveRequested(int? id)

请注意,我也会使用
HttpPost
来删除,而不是像您当前所做的那样使用
HttpGet

好的-谢谢,现在在获取
请求的URL:/Container/removequested/0
时做了一些更改-因此没有分配id,如何最好地执行此操作?将此添加到您的密钥
[数据库生成](DatabaseGeneratedOption.Identity)]
太多。:)这需要EF吗?那是干什么的?我想避免EF,所以在提交到实际数据库之前,只需将模型用作临时数据库。也就是EF,如果它是我,我将有一个视图模型或模型,并使用automapper从EF数据实体映射它,该实体上有EF特定的属性,但这一切都取决于您的架构选择。谢谢,非常有帮助-所以如果没有临时数据库文件,我无法轻松实现这一点?是否在课程结束/最终提交时删除?
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; }
}
public ActionResult RemoveRequested(int? id)