【问题标题】:ASP.NET: View is shown without going through controllerASP.NET:不通过控制器显示视图
【发布时间】:2014-09-23 15:04:48
【问题描述】:

我是 MVC 的新手,所以我一直在苦苦挣扎...... 我有这个网址。操作:

<a data-toggle="modal" data-target="#modal" href="@Url.Action("Edit", "ControllerName", new { id=item.id })"></a>

它正在使用引导程序在模态中打开“编辑”视图。控制器是这样的:

// GET
[HttpGet]
public ActionResult Edit(int id = 0)
{
    mv= bll.Details(id);
    if (mv == null)
    {
        return HttpNotFound();
    }
    method(mv);
    return PartialView(mv);
}

// POST:
[HttpPost]
public ActionResult Edit(TYPE pMv)
{

    if (ModelState.IsValid)
    {
        bll.Edit(pMv);

        return RedirectToAction("Index");
    }
    return PartialView(pMv);
}

所以我点击链接,它打开了带有视图的模式,我更改了数据,它保存在数据库中,一切正常。 Internet Explorer 的问题:如果我再次单击编辑此项目的链接,它会在模型​​中打开视图,但没有通过控制器的 GET ActionResult,是什么导致视图显示上一个信息,没有我所做的更改。

我可以对每个项目执行此操作,它们都会显示他们自己的信息(不是来自上一个项目),但不会更新我所做的更改。 如果我使用它的 URL (//localhost:5528/MV/Edit/49) 访问视图,那么信息就会更新。

知道为什么会这样吗?

【问题讨论】:

  • 这是因为内容是作为html放置的,并且每次都没有获取新数据
  • 如果您使用 chrome 并检查网络选项卡,是否在第二次单击时显示 304?如果是这样,那么您可能需要关闭 jquery 中的缓存,使用类似 $.ajaxSetup({cache:false});
  • @Slicksim 我使用 IE 来调试 Javascript,所以我改用 Chrome 并注意到它只发生在 IE 中(它在 POST 中得到 304),Firefox 和 Chrome 都可以。我按照你说的做了,现在可以了!谢谢!! PS:我如何投票给你的anwser?
  • 我已经充实并添加了它作为答案:)

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


【解决方案1】:

从您的 cmets 和其他人的利益来看,IE 在缓存方面更具侵略性,我个人怀疑这是试图虚张声势,就像 chrome/firefox 一样快 :)

您可以通过查看网络/配置文件选项卡或 iis 日志来诊断此问题,以查看请求是否收到 304(内容未更改)响应。

要解决此问题,只需在您的 _layout 或每次需要重新加载的每个视图中使用它来关闭 ajax 调用的缓存

$.ajaxSetup({cache:false});

希望这对其他人有所帮助

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多