我是Web开发及其原理的新手,如果我的问题看起来不清楚,我很抱歉。
迄今为止的故事
我正在编写一个开源应用程序来学习ASP.NET MVC3。现在我正处于创建CRUD控制器以允许我创建一些新类型的阶段。现在我已经创建了一个SiteAdmin控制器,它可以容纳我的仪表板,并具有一个视图。视图将包含选项卡。我一直在学习如何使用以下博客文章和JQueryUI处理选项卡
http://ericdotnet.wordpress.com/2009/03/17/jquery-ui-tabs-and-aspnet-mvc/
我决定使用AJAX示例来处理我的选项卡,通过该示例,我将一个索引参数传递给名为AjaxGetTab的控制器操作方法。此方法(根据博客文章)返回所需类型的部分视图。在部分视图中,有创建控制器操作方法,例如CreateTransactionType(HttpPost),用于创建新记录。
"停止胡言乱语问题出在哪里"
问题是,在Create方法完成后,视图选项卡中的列表不会刷新。这个问题只存在于IE9中(只有我测试过的IE),但Chrome和Firefox可以工作,即刷新列表。
我已检查数据库记录是否存在。
我的代码在这里:
Dashboard中的JQuery。cshtml:
<script type="text/javascript">
$(document).ready(function() {
$("#tabs").tabs();
getContentTab (1);
});
function getContentTab(index) {
var url='@Url.Content("~/SiteAdmin/AjaxGetTab")/' + index;
var targetDiv = "#tabs-" + index;
var ajaxLoading = "<img id='ajax-loader' src='@Url.Content("~/Content")/ajax-loader.gif' align='left' height='28' width='28'>";
$(targetDiv).html("<p>" + ajaxLoading + " Loading...</p>");
$.get(url,null, function(result) {
$(targetDiv).html(result);
});
}
SiteAdminController AjaxGetTab方法:
/// <summary>
/// AJAX action method to obtain the correct Tab to use.
/// </summary>
/// <param name="index">Tab number</param>
/// <returns>Partial View</returns>
public ActionResult AjaxGetTab(int id)
{
string partialViewName = string.Empty;
object model = null;
//--Decide which view and model to pass back.
switch (id)
{
case 1:
partialViewName = "_TransactionType";
model = db.TransactionTypes.ToList();
break;
case 2:
partialViewName = "_DirectionType";
model = db.DirectionTypes.ToList();
break;
case 3:
partialViewName = "_UserType";
model = db.UserTypes.ToList();
break;
case 4:
partialViewName = "_CurrencyType";
model = db.CurrencyTypes.ToList();
break;
case 5:
partialViewName = "_tabError";
break;
}
return PartialView(partialViewName,model);
}
}
SiteAdminController CreateTransactionType方法:
[HttpPost]
public ActionResult CreateTransactionType(TransactionType model)
{
try
{
// TODO: Add insert logic here
if (ModelState.IsValid)
{
model.id = Guid.NewGuid();
model.RecordStatus = " ";
model.CreatedDate = DateTime.Now;
db.TransactionTypes.AddObject(model);
db.SaveChanges();
}
return RedirectToAction("Dashboard");
}
catch
{
return PartialView("_tabError");
}
}
更换
$.get(url,null, function(result) {
$(targetDiv).html(result);
});
签字人:
$.ajax({
type: 'get',
url: url,
cache: false,
success: function(result) {
$(targetDiv).html(result);
}
});
问题是IE缓存ajax请求,所以通过在设置中设置cache:ffalse,它应该可以工作。