ASP.NET MVC Redirect

Я працюю на одному з моїх перших ASP MVC-програм на даний момент. Програма повинна показати мені список продуктів, і за посиланням під назвою продукту має бути можливим редагування продукту. Нема жодної проблеми поки що.

@model MVC3Demo.Product

@{
    ViewBag.Title = "Edit";
}

Edit

@using (Html.BeginForm("Save", "Product"))
{
<div>
    <input type="hidden" id="ID" name="ID" value="@Model.ID" />
    ProduktID @Model.ID
</div>
<div>
    Produktname <input id="Name" name="Name" type="text" [email protected] />
</div>
<div>
    Preis <input id="Price" name="Price" type="text" [email protected] />
</div>
<div>
    <input type="submit" value="Speichern"/>
</div>

}

Тепер я написав метод дії Save , який повинен оновити мої дані:

    public ActionResult Save(Product p)
    {
        ProductRepository rep = new ProductRepository();
        rep.Update(p);
        return RedirectToAction("List");
    }

"Список" -View - це місце, де я бачу всі продукти з посиланням на редагування. Проблема в тому, що якщо я натискаю кнопку збереження, вона перенаправляє мене до старого списку, а не до оновленого. Я налагодив свій проект, і я впевнений, що оновлення-метод працює правильно і оновлює продукт.

Моя дія List :

@model IEnumerable

@{
    ViewBag.Title = "List";
}

List


    @foreach (MVC3Demo.Product p in Model) {
  • @p.Name @Html.ActionLink("bearbeiten", "Edit", "Product", p, null)
  • //new{ ID = p.id} }

Оскільки ви запитали, ось список дій List :

    public ActionResult List()
    {
        ProductRepository rep = new ProductRepository();
        return View(rep.GetAll());
    }

То де ж моя помилка?

0
Що саме робить ваш продукт ProductRepository, якщо він не зберігає в базі даних?
додано Автор Chris, джерело
Вам потрібно показати нам свій код сховища.
додано Автор Paulo Abreu, джерело
Чи можете ви опублікувати свій список дій?
додано Автор swapneel, джерело
Чи можете ви публікувати код для списку дій? як public Action Result List {}
додано Автор swapneel, джерело
ви можете використовувати TempData для передачі даних між діями контролера
додано Автор swapneel, джерело
Передача даних у додатку ASP.NET MVC - msdn.microsoft.com/en- us/library/dd394711.aspx
додано Автор swapneel, джерело
Ваші дані не зберігаються, спробуйте використовувати rep.Savechange або rep.AcceptChanges в stad of rep.update (p)
додано Автор Chlebta, джерело
Я гадаю, що оновлені дані не зберігаються в базі даних. Чи підтвердили ви дані на рівні бази даних?
додано Автор Chris Shouts, джерело
@Harald - Список - це ваша проблема. Це не буде зберігатися між запитами.
додано Автор Chris Shouts, джерело
Ви впевнені, що List не надходить з будь-якого кеша? (браузер або .net)
додано Автор Sedat Kapanoglu, джерело
Вибачте, це IList , але як я можу вирішити проблему персистуючої проблеми?
додано Автор Harald, джерело
У мене немає бази даних, я просто встановив список , і я впевнений, що він там збережений.
додано Автор Harald, джерело

2 Відповіді

Схоже, ви викликаєте це оновлення, але насправді не надсилає саму транзакцію, чи має ваше сховище SubmitChanges, AcceptChanges або Commit чи щось подібне? Як і в DataTables, ваші зміни фактично не вступлять в силу (зберегти в базі даних), поки ви не дзвоните AcceptChanges.

1
додано

Спробуйте використати атрибут HttpPost в методі контролера Save .

[HttpPost]
public ActionResult Save(Product p)
    {
        ProductRepository rep = new ProductRepository();
        rep.Update(p);
        return RedirectToAction("List");
    }
1
додано
Немає необхідності додавати HttpPost ...
додано Автор Paulo Abreu, джерело
Вам потрібен лише HttpPost, якщо методи одержання та публікації були названі однаковими.
додано Автор mattytommo, джерело
Будь ласка, використовуйте зворотні кліпи для inline code як у ваших власних публікаціях, так і при редагуванні вмісту інших людей.
додано Автор meagar, джерело
??? Що це пов'язано з оновленням списку?
додано Автор archil, джерело
+1 Я думаю, ви маєте рацію, це має бути HttpPost . Запити, зроблені через GET "НЕ повинні мати значення для виконання дії, відмінної від пошуку". Частина специфікації HTTP! tools.ietf.org/html/rfc2616 розділ 9.1.1
додано Автор Tom Chantler, джерело
Я думаю, що ваш метод збереження не зберігає результати в базі даних. Тож у такому випадку він не оновлює список.
додано Автор Mansoor Gee, джерело
Ні, це не працює.
додано Автор Harald, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug