C# 如何从列表中删除记录
如何通过单击此处的“删除”按钮从MVC4ASP.NET中的列表中删除记录我不使用任何数据库,我想从列表中删除我在控制器中定义的记录。在没有任何数据库的情况下,使用删除操作从列表中删除记录 学生控制员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
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");
}
}