Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从列表中删除记录_C#_Asp.net_.net_Asp.net Mvc - Fatal编程技术网

C# 如何从列表中删除记录

C# 如何从列表中删除记录,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,如何通过单击此处的“删除”按钮从MVC4ASP.NET中的列表中删除记录我不使用任何数据库,我想从列表中删除我在控制器中定义的记录。在没有任何数据库的情况下,使用删除操作从列表中删除记录 学生控制员 public class StudentController : Controller { // // GET: /Student/ public ActionResult Index() { List<StudentVM> student

如何通过单击此处的“删除”按钮从MVC4ASP.NET中的列表中删除记录我不使用任何数据库,我想从列表中删除我在控制器中定义的记录。在没有任何数据库的情况下,使用删除操作从列表中删除记录

学生控制员

public class StudentController : Controller
{
    //
    // GET: /Student/
    public ActionResult Index()
    {
        List<StudentVM> students = new List<StudentVM>();
        StudentVM obj1 = new StudentVM();
        obj1.Name = "Zeeshan";
        obj1.id = "1";
        obj1.Address = "Lahore";

        students.Add(obj1);


        StudentVM obj2 = new StudentVM();
        obj2.Name = "Zeshan";
        obj2.id = "2";
        obj2.Address = "Lahore";

        students.Add(obj2);
        return View(students);
    }

    public ActionResult Delete(string? i)
    {
        List<StudentVM> students = new List<StudentVM>();

        var st = students.Find(c => c.id = i);
        students.Remove(st);
        return View("Index");
    }
}
公共类学生控制器:控制器
{
//
//获得:/Student/
公共行动结果索引()
{
列出学生=新建列表();
StudentVM obj1=新StudentVM();
obj1.Name=“泽山”;
obj1.id=“1”;
obj1.Address=“拉合尔”;
添加(obj1);
StudentVM obj2=新StudentVM();
obj2.Name=“泽山”;
obj2.id=“2”;
obj2.Address=“拉合尔”;
添加(obj2);
返回视图(学生);
}
公共操作结果删除(字符串?i)
{
列出学生=新建列表();
var st=students.Find(c=>c.id=i);
学生:移除(st);
返回视图(“索引”);
}
}
查看

@model List<Activity2.Models.StudentVM>
@{
    ViewBag.Title = "Index";
}

<table border="1">
    <tr>
        <th>Id</th>
        <th>Name</th>
        <th>Address</th>
    </tr>

    @foreach (var obj in Model)
    {
        <tr>
            <td>@obj.id</td>
            <td>@obj.Name</td>
            <td>@obj.Address</td>
            <td>@Html.ActionLink("Delete","Delete",new{i = obj.id}) </td>
        </tr>
    </table>
    }
@型号列表
@{
ViewBag.Title=“Index”;
}
身份证件
名称
住址
@foreach(模型中的var obj)
{
@对象id
@对象名称
@目标地址
@ActionLink(“删除”,“删除”,新的{i=obj.id})
}
错误

public class StudentController : Controller
{
    //
    // GET: /Student/
    public ActionResult Index()
    {
        List<StudentVM> students = new List<StudentVM>();
        StudentVM obj1 = new StudentVM();
        obj1.Name = "Zeeshan";
        obj1.id = "1";
        obj1.Address = "Lahore";

        students.Add(obj1);


        StudentVM obj2 = new StudentVM();
        obj2.Name = "Zeshan";
        obj2.id = "2";
        obj2.Address = "Lahore";

        students.Add(obj2);
        return View(students);
    }

    public ActionResult Delete(string? i)
    {
        List<StudentVM> students = new List<StudentVM>();

        var st = students.Find(c => c.id = i);
        students.Remove(st);
        return View("Index");
    }
}
错误1类型“string”必须是不可为空的值类型,以便 将其用作泛型类型或方法中的参数“T” “System.Nullable”
错误3无法将类型“string”隐式转换为“string”


首先,由于错误消息明确指出您需要使用
string
而不是
string?

public ActionResult Delete(string i)
其次,您应该知道,MVC是无状态的,因为HTTP是无状态的。因此,此代码不会按照您的期望删除记录。为了使此代码正常工作,您需要使用。大概是这样的:

if(Session["StudentVM"] == null)
{
    //Your Code
     Session["StudentVM"] = students;
}
以及:

公共操作结果删除(字符串i)
{
将学生=会话[“StudentVM”]列为列表;
var st=students.Find(c=>c.id=i);
//剩下的代码。。。
}

您正在尝试使用可为空的引用类型,这是C#8.0的一个特性(它还没有发布)。为了修复错误,您必须更改
字符串?i
字符串i

要从列表中删除项目,您必须在
Index()
之外创建它,并将其设置为静态,以便其他端点(如
Delete()
)能够访问列表。这样,每次有人访问控制器的索引时,列表中会添加两个新的学生(可能不是您希望的长期行为,我只是在这一个上复制了您的代码):

公共类学生控制器:控制器
{
私有静态只读列表_students=new List();
公共行动结果索引()
{
StudentVM obj1=新StudentVM();
obj1.Name=“泽山”;
obj1.id=“1”;
obj1.Address=“拉合尔”;
_添加(obj1);
StudentVM obj2=新StudentVM();
obj2.Name=“泽山”;
obj2.id=“2”;
obj2.Address=“拉合尔”;
_添加(obj2);
返回视图(学生);
}
公共操作结果删除(字符串i)
{
var student=\u students.FirstOrDefault(c=>c.id==i);
如果(student==null){/*找不到student*/}
_学生。移除(学生);
返回视图(“索引”);
}
}

您的视图代码中似乎也有错误。
应该在foreach之外。

我已经尝试了您的代码。此错误发生在1<代码>错误1当前上下文中不存在名称“students”错误2无法将lambda表达式转换为委托类型“System.Func”,因为块中的某些返回类型无法隐式转换为委托返回类型错误3无法将类型“string”隐式转换为“bool”@rajpotrana我发布的代码段不应该有这样的错误。你从哪里得到它?错误是因为id这个错误出现在这里
var student=\u students.FirstOrDefault(c=>c.id=i)错误无法将类型从“字符串”隐式转换为“bool”@rajpotrana Wupps,我从您的代码中复制了错误的类型。它需要是
var student=\u students.FirstOrDefault(c=>c.id==i)。现在一切都应该正常了。如果是,请将此答案标记为答案,以便其他人知道问题已解决。NullReference异常未由用户代码
@foreach处理(模型中的var obj)
Sir如果您有正确的代码,知道如何在没有数据库的情况下从MVC asp.net列表中删除记录,请与我共享…@rajpotrana我在回答中向您展示的代码是正确的。你只需要试试!你能告诉我们你为什么不想使用数据库吗?
public class StudentController : Controller
{
    private static readonly List<StudentVM> _students = new List<StudentVM>();

    public ActionResult Index()
    {
        StudentVM obj1 = new StudentVM();
        obj1.Name = "Zeeshan";
        obj1.id = "1";
        obj1.Address = "Lahore";

        _students.Add(obj1);

        StudentVM obj2 = new StudentVM();
        obj2.Name = "Zeshan";
        obj2.id = "2";
        obj2.Address = "Lahore";

        _students.Add(obj2);

        return View(students);
    }

    public ActionResult Delete(string i)
    {
        var student = _students.FirstOrDefault(c => c.id == i);

        if(student == null){ /* Failed to find student */ }

        _students.Remove(student);
        return View("Index");
    }
}