什么会导致 MVC 应用程序在从数据库中拉出后不在 IE 中显示当前信息?
What could cause an MVC app to not display current information in IE after it's pulled from the DB?
前面的底线: MVC 字段在 Firefox/Chrome 上更新,但在 IE 上不更新(除非我执行特定序列)。
我有一个 ASP.NET MVC 5 应用程序,它显示有关事件的信息。如果您单击给定的列表项,页面的主要部分将显示有关该事件的所有相关信息。从这里,您可以编辑信息并将更改保存到数据库。
这适用于 Firefox、Chrome 和 IE 11。当用户单击不同的事件并 returns 回到原始事件时,您会期望从中提取最新数据数据库并填充到主要部分。在 Firefox/Chrome 上,会发生这种情况。在 IE 11 上,这只会发生在您:
- 在 VS 中调试
- 运行 在 IE 11 中右击某项并“检查元素”
- 转到“调试器”选项卡
- 让它用VS调试
- 在VS中设置断点
或
- 退出当前 IE 11 实例
- 重新加载 IE 11
- 再次点击原来的活动条目
我试过将缓存设置为每次加载页面时强制更新。下面是获取事件方法的代码:
[Authorize(Roles = "Community Admin, Global Admin")]
public JsonResult GetEvent(int? EventId)
{
EventContext context = new EventContext();
Event events = context.Events.Where(a => a.EventId == EventId && a.Active == true).SingleOrDefault();
if (events == null)
{
events = new Event();
events.CommunityId = this.GetUserProfile().CommunityId;
}
JsonResult json = new JsonResult();
json.Data = events;
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
}
这是处理 GetEvent 方法的 javascript:
var url = '@Url.Action("GetEvent", "Event")';
$.getJSON(url, { EventId: eventid },
function (data) {
$("#hdnEventId").val(data.EventId);
$("#txtEventName").val(data.EventName);
$("#txtEventDescription").val(data.Description);
$("#txtAddress1").val(data.Address1);
$("#txtAddress2").val(data.Address2);
$("#txtCity").val(data.City);
$("#StateSelector").val(data.State);
$("#txtZipCode").val(data.Zip);
$("#txtWebsite").val(data.WebsiteURL);
$("#txtPhone").val(data.Phone);
$("#txtEmail").val(data.Email);
if (data.Active == "1")
$("#cbxActive").prop('checked', true);
else
$("#cbxActive").prop('checked', false);
});
这让我觉得 getEvent() 方法不会执行,除非……它会执行。控制器方法和 javascript 之间是否存在某种脱节?我会对此感到惊讶,因为它在其他浏览器上运行良好。
我可以提供其他任何信息来帮助您理解问题吗?
看起来 $.getJSON 正在以某种方式缓存数据。尝试禁用它。
How to set cache false for getJSON in JQuery?
$(文档).ready(函数() {
$.ajaxSetup({ 缓存: false });
});
前面的底线: MVC 字段在 Firefox/Chrome 上更新,但在 IE 上不更新(除非我执行特定序列)。
我有一个 ASP.NET MVC 5 应用程序,它显示有关事件的信息。如果您单击给定的列表项,页面的主要部分将显示有关该事件的所有相关信息。从这里,您可以编辑信息并将更改保存到数据库。
这适用于 Firefox、Chrome 和 IE 11。当用户单击不同的事件并 returns 回到原始事件时,您会期望从中提取最新数据数据库并填充到主要部分。在 Firefox/Chrome 上,会发生这种情况。在 IE 11 上,这只会发生在您:
- 在 VS 中调试
- 运行 在 IE 11 中右击某项并“检查元素”
- 转到“调试器”选项卡
- 让它用VS调试
- 在VS中设置断点
或
- 退出当前 IE 11 实例
- 重新加载 IE 11
- 再次点击原来的活动条目
我试过将缓存设置为每次加载页面时强制更新。下面是获取事件方法的代码:
[Authorize(Roles = "Community Admin, Global Admin")]
public JsonResult GetEvent(int? EventId)
{
EventContext context = new EventContext();
Event events = context.Events.Where(a => a.EventId == EventId && a.Active == true).SingleOrDefault();
if (events == null)
{
events = new Event();
events.CommunityId = this.GetUserProfile().CommunityId;
}
JsonResult json = new JsonResult();
json.Data = events;
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return json;
}
这是处理 GetEvent 方法的 javascript:
var url = '@Url.Action("GetEvent", "Event")';
$.getJSON(url, { EventId: eventid },
function (data) {
$("#hdnEventId").val(data.EventId);
$("#txtEventName").val(data.EventName);
$("#txtEventDescription").val(data.Description);
$("#txtAddress1").val(data.Address1);
$("#txtAddress2").val(data.Address2);
$("#txtCity").val(data.City);
$("#StateSelector").val(data.State);
$("#txtZipCode").val(data.Zip);
$("#txtWebsite").val(data.WebsiteURL);
$("#txtPhone").val(data.Phone);
$("#txtEmail").val(data.Email);
if (data.Active == "1")
$("#cbxActive").prop('checked', true);
else
$("#cbxActive").prop('checked', false);
});
这让我觉得 getEvent() 方法不会执行,除非……它会执行。控制器方法和 javascript 之间是否存在某种脱节?我会对此感到惊讶,因为它在其他浏览器上运行良好。
我可以提供其他任何信息来帮助您理解问题吗?
看起来 $.getJSON 正在以某种方式缓存数据。尝试禁用它。
How to set cache false for getJSON in JQuery?
$(文档).ready(函数() { $.ajaxSetup({ 缓存: false }); });