Как удалить запись из списка в MVC 4 ASP.NET, нажав кнопку «Удалить». Здесь я не использую какую-либо базу данных. Я хочу удалить запись из списка, который я определил в контроллере. без какой-либо базы данных удалить запись из списка с помощью действия удаления
StudentController
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");
}
}
Вид
@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>
}
Ошибка
Error 1 The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'
Error 3 Cannot implicitly convert type 'string?' to 'string'





Во-первых, поскольку сообщение об ошибке ясно говорит, что вам нужно использовать string вместо string?:
public ActionResult Delete(string i)
И во-вторых, вы должны знать, что MVC - это без гражданства, потому что это HTTP. Таким образом, этот код не удалит запись в соответствии с вашими ожиданиями. Чтобы этот код работал, вам нужно использовать Сессия. Что-то вроде этого:
if (Session["StudentVM"] == null)
{
//Your Code
Session["StudentVM"] = students;
}
И:
public ActionResult Delete(string i)
{
List<StudentVM> students = Session["StudentVM"] as List<StudentVM>;
var st = students.Find(c=>c.id=i);
//The rest of your code...
}
Сэр, если у вас есть правильный код, как удалить запись из списка в MVC asp.net без базы данных, пожалуйста, поделитесь со мной ...
@rajpootrana Код, который я показал вам в своем ответе, правильный. Вам просто нужно попробовать!
Вы пытаетесь использовать ссылочные типы, допускающие значение NULL, что является функцией C# 8.0 (которая не была выпущена пока что). Чтобы исправить ваши ошибки, вам нужно сменить string? i на string i.
Чтобы удалить элементы из списка, вам нужно создать его вне вашего Index() и сделать его статическим, чтобы другие конечные точки, такие как Delete(), могли получить доступ к списку. Таким образом, каждый раз, когда кто-то обращается к индексу вашего контроллера, в список добавляются два новых ученика (вероятно, не то поведение, которое вы хотели бы в долгосрочной перспективе, я просто скопировал ваш код на этот):
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");
}
}
Также кажется, что в вашем коде просмотра есть ошибка. </table> должен находиться за пределами foreach.
Я попробовал ваш код, эта ошибка пришла 1. Error 1 The name 'students' does not exist in the current context Error 2 Cannot convert lambda expression to delegate type 'System.Func<Activity2.Models.StudentVM,bool>' because some of the return types in the block are not implicitly convertible to the delegate return type Error 3 Cannot implicitly convert type 'string' to 'bool'
@rajpootrana в опубликованном мной фрагменте не должно быть такой ошибки. Где ты это берешь?
ошибка возникает из-за идентификатора, эта ошибка возникает здесь Ошибка var student = _students.FirstOrDefault(c => c.id = i); Невозможно неявно преобразовать тип из 'string' в 'bool'
@rajpootrana Wupps, я неправильно скопировал из вашего кода. Это должен быть var student = _students.FirstOrDefault(c => c.id == i);. Теперь все должно работать. Если да, отметьте этот ответ как ответ, чтобы другие знали, что проблема решена.
NullReferenceException не было обработано кодом пользователя @foreach (var obj in Model)
@rajpootrana это исключение не имеет ничего общего с заданным вами вопросом. Отметьте мой ответ как вопрос, поскольку он, вероятно, решает заданный вами вопрос.
Можете ли вы рассказать нам, почему вы не хотите использовать базу данных?