2012-09-25 55 views
1

我有一个控制器动作,被JQuery ajax调用,并希望返回“结果”的内容到请求页​​面。 到目前为止,我有...部分视图不通过Ajax调用渲染

控制器

public ActionResult DynCalc(resultsModel model){ 
    ... 
    //code that populates model - all working ok 
    ... 
    if (Request.IsAjaxRequest()) 
      { 
      return PartialView("results", model.Results); 
      } 
      else 
      { 
      return null; //Handle this later 
      } 
    } 

这传回一个有效的模式。 从javascript调用:

 $.ajax({ 
      url: "/Test/DynCalc", 
      type: "POST", 
      data: $("#frmResults").serialize(), //This part works 
      dataType: "html", 
      success: function (result) { 
       $('#resultsSection').html(result); 
       $('#hide_panel a').flash("#111", 1000); 
      } 
     }); 

成功从未被击中。希望有人能告诉我,我很愚蠢,错过了一些明显的东西?

我的部分浏览结果只是一个带有javascript的HTML页面。如果我有以下

在我的结果视图Hello world,然后它工作正常,与任何脚本,它不

我在正确的轨道上?我应该改变控制器的回报类型吗?或者使用JSON?

我没有发布结果页面的内容,因为无论它是整个文档还是简单的<b>hi</b> - 它都做同样的事情。

+0

通过JQ我假设你的意思是jQuery?我会建议使用Firefox和Firebug来进行调试。您可以逐步浏览并查看实际发生的情况,并监控网络流量。还要添加一个失败/错误事件处理程序,因为如果失败/错误失败,那也会告诉你一些事情。 –

+0

@DaleBurrell是的,我还添加了一个失败处理程序,它每次都被打中,'results'是一个对象 - 我无法检查。 – JustAnotherDeveloper

+0

你无法在Firebug中检查它吗? –

回答

1

试着返回一个视图。因为在这种情况下你的结果是一个完整的视图(因为行为结果可能是HTML,XML,JSON等等)。 仅使用PartialView 作为呈现视图的部分的方法。

E.g.在你的MasterPage上,你想“总是”渲染用户信息:@RenderAction("UserInfoAction", "UserController")

0
var model= { 
     "PropertyName1":$("#txt1").val(), 
     "PropertyName1": $("#txt2").val(),   
     } 

    $.ajax({ 
     type:"POST", 
     url: 'Url.Action("DynCalc","ControllerName")', 
     data: JSON.stringify(model), 
     contentType: "application/json;charset=utf-8", 
     success: function (data, status, xhr) 
      { 
     alert("The result is : " + status + ": " + data); 
      }, 
     error: function (xhr) 
     { 
     alert(xhr.responseText); 
     } 
     });