我已经从使用IE7转换为使用IE9,不幸的是,我的部分视图被返回,并用部分视图覆盖整个页面。
点击html中的按钮,我调用
在javascript:中
$.ajax({
type: "POST",
url: $('form').attr('action'),
data: $('form').serialize(),
dataType: "text",
success: function (response) {
alert('Pass'); // This will be hit
},
error: function (errorObj) {
alert('Error');
}
});
然后进入控制器:
[HttpPost]
public ActionResult Index(Index model)
{
return NewFeature(model);
}
[HttpPost]
public ActionResult NewFeature(Index model)
{
return PartialView("_feature", model);
}
知道可能是什么吗?
只要它不是提交按钮,就没有必要阻止默认行为。如果是提交按钮,则需要通过返回false来覆盖基本操作。即
<input type="submit" onclick="return myFunction()" />
function myFunction()
{
DoWork();
return false;
}
由于您正在返回一个部分,并且已经确认警报被击中,因此答案应该很简单:
success: function (response) {
$("#DivIdToUpdate").html(response);
}
另一件需要注意的事情是,类型可能应该是json而不是文本,但我看不到您代码的其余部分。此外,控制器上的函数调用似乎不正确。也试着改变这个。
[HttpPost]
public ActionResult Index(Index model)
{
return this.RedirectToAction("NewFeature", new { model = model });
}
[HttpGet]
public ActionResult NewFeature(Index model)
{
return this.PartialView("_feature", model);
}
这段代码遵循post->redirect->get模式,将发出两个请求,一个用于工作,另一个用于获取新数据。这将导致ModelState刷新并重新加载所需的所有数据。javascript ajax post将从控制器接收ActionResult作为编译后的cshtml,因此通过调用上面的代码,html将在您喜欢的任何元素中呈现。
此外,
url: $('form').attr('action'),
可以很容易地翻译成:
url: '@Url.Content("~/Home/Index")',