【问题标题】:ASP.NET MVC RedirectASP.NET MVC 重定向
【发布时间】:2011-10-28 16:19:05
【问题描述】:

我目前正在开发我的第一个 ASP MVC 程序。 该程序应该向我显示产品列表,并且产品名称下方有一个链接,应该可以编辑产品。到目前为止没有问题。

@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>

}

现在我编写了一个 Save 操作方法来更新我的数据:

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

“列表”视图是我可以通过编辑链接查看所有产品的地方。 问题是,如果我按下保存按钮,它会将我重定向到旧列表,而不是更新后的列表。我调试了我的项目,我确信更新方法可以正常工作并更新产品。

我的List 操作是:

@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>

因为你问,这里是List 行动:

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

那么我的错误在哪里?

【问题讨论】:

  • 我猜更新的数据没有保存在数据库中。您是否在数据库级别验证过数据?
  • @Harald - List 是你的问题。它不会在请求之间持久化。
  • 在 ASP.NET MVC 应用程序中传递数据 - msdn.microsoft.com/en-us/library/dd394711.aspx
  • 如果您的 ProductRepository 不保存到数据库中,它究竟做了什么?
  • 您需要向我们展示您的存储库代码。

标签: c# asp.net .net asp.net-mvc razor


【解决方案1】:

看起来您正在调用更新,但实际上并没有提交事务本身,您的存储库是否有 SubmitChanges、AcceptChanges 或 Commit 或类似的东西?与 DataTables 一样,在您调用 AcceptChanges 之前,您的更改不会真正生效(保存到数据库中)。

【讨论】:

    【解决方案2】:

    尝试在Save 控制器方法中包含HttpPost 属性。

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

    【讨论】:

    • 我认为您的 Save 方法没有将结果保存在数据库中。所以在这种情况下它不会更新列表。
    • 请在您自己的帖子和编辑其他人的内容时使用inline code 的反引号。
    • 只有在 Get 和 Post 方法的名称相同时才需要 HttpPost。
    • +1 我认为你是对的,它应该是HttpPost。通过GET 完成的请求“不应该具有采取除检索之外的操作的意义”。 HTTP 规范的一部分! tools.ietf.org/html/rfc2616 9.1.1 节
    猜你喜欢
    • 2010-12-23
    • 2011-06-25
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2011-05-27
    • 2011-03-27
    相关资源
    最近更新 更多