Как удалить запись из списка

Как удалить запись из списка в 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'

Можете ли вы рассказать нам, почему вы не хотите использовать базу данных?

mjwills 09.12.2018 11:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Во-первых, поскольку сообщение об ошибке ясно говорит, что вам нужно использовать 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 без базы данных, пожалуйста, поделитесь со мной ...

rajpoot rana 08.12.2018 21:51

@rajpootrana Код, который я показал вам в своем ответе, правильный. Вам просто нужно попробовать!

Salah Akbari 09.12.2018 07:39
Ответ принят как подходящий

Вы пытаетесь использовать ссылочные типы, допускающие значение 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'

rajpoot rana 08.12.2018 20:22

@rajpootrana в опубликованном мной фрагменте не должно быть такой ошибки. Где ты это берешь?

Tobias Tengler 08.12.2018 20:25

ошибка возникает из-за идентификатора, эта ошибка возникает здесь Ошибка var student = _students.FirstOrDefault(c => c.id = i); Невозможно неявно преобразовать тип из 'string' в 'bool'

rajpoot rana 08.12.2018 20:37

@rajpootrana Wupps, я неправильно скопировал из вашего кода. Это должен быть var student = _students.FirstOrDefault(c => c.id == i);. Теперь все должно работать. Если да, отметьте этот ответ как ответ, чтобы другие знали, что проблема решена.

Tobias Tengler 08.12.2018 21:12

NullReferenceException не было обработано кодом пользователя @foreach (var obj in Model)

rajpoot rana 08.12.2018 21:22

@rajpootrana это исключение не имеет ничего общего с заданным вами вопросом. Отметьте мой ответ как вопрос, поскольку он, вероятно, решает заданный вами вопрос.

Tobias Tengler 09.12.2018 10:41

Другие вопросы по теме