简体   繁体   中英

ASP.NET MVC Redirect

I work on one of my first ASP MVC-programs at the moment. The program should show me a list of product, and with a link beneath the name of the product it should be possible to edit the product. No problem so far.

@model MVC3Demo.Product

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>
@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" value=@Model.Name />
</div>
<div>
    Preis <input id="Price" name="Price" type="text" value=@Model.Price />
</div>
<div>
    <input type="submit" value="Speichern"/>
</div>

}

Now I have written a Save action method that should update my data:

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

The "List"-View is where I can see all products with the edit-link. The problem is, that if I press the save-button, it redirects me to the old list, not to the updated one. I debugged my project and I´m sure that the update-method works correct and updates the product.

My List action is:

@model IEnumerable<MVC3Demo.Product>

@{
    ViewBag.Title = "List";
}

<h2>List</h2>

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

Because you asked, here is the List Action:

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

So where could be my mistake?

It looks like you're calling the update, but you're not actually submitting the transaction itself, does your repository have a SubmitChanges, AcceptChanges or Commit or something similar? As with DataTables, your changes won't actually take effect (save to the database) until you call AcceptChanges.

Try include an HttpPost attribute at Save controller method.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM