2014-01-07 44 views
0

我已经从使用IE7转换为IE9,不幸的是我的部分视图被返回并用部分视图覆盖整个页面。部分视图仅在ajax调用后才加载

上点击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); 
    } 

任何想法是什么可能?

+0

1)如果AJAX是通过链接点击或触发形式提交,请确保您〔如取消行动](http://stackoverflow.com/questions/9370286/disable-href-after-clicking-ajax-js)2)确保你没有'_layout.cshtml'在你的部分。 – StuartLC

回答

0

只要它不是提交按钮,就不需要防止默认行为。如果是提交按钮,则需要通过返回false来覆盖基本操作。

success: function (response) { 
      $("#DivIdToUpdate").html(response); 
     } 

另外一点需要注意的是,该类型可能是应该:即

<input type="submit" onclick="return myFunction()" /> 

function myFunction() 
{ 
    DoWork(); 
    return false; 
} 

既然你正在返回的部分,并已证实,该警报被击中,因为答案应该是简单是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); 
} 

此代码是在后 - >重定向 - >获取模式,并将提出两个请求,一个做工作,另一个获取最新数据。这将导致ModelState刷新并新加载所需的所有数据。 javascript ajax文章将从控制器接收ActionResult作为编译后的cshtml,因此通过调用上面的代码,html将呈现在您喜欢的任何元素中。

此外,

url: $('form').attr('action'), 

可以很容易地转化为:

url: '@Url.Content("~/Home/Index")',