只有在ajax调用之后才加载Partial View



我已经从使用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")',

最新更新