2016-08-13 60 views
0

我想要实现的是更新包含部分视图的页面的某些部分。我对这样的尝试是下面:如何将通过AJAX收到的数据传递给ASP MVC部分视图?

 $.ajax({ 
     type: 'GET', 
     url: actionUrl, 
     success: function (data) { 
      $("#results").html(""); 
      $("#results").append(@Html.Partial("_FirstPartial", data.FirstDataSet)); 
      $("#results").append(@Html.Partial("_SecondPartial", data.SecondDataSet));  
      } 
     }); 

我当然不能错过JS变量ASP MVC方法那样的,所以我怎么可能?或者,我可以更新页面的方式有一个完全不同的,更好的方法?

+0

'@ Html.Partial()'是剃须刀代码,在服务器发送到视图之前在服务器上进行评估。你的控制器方法需要返回一个局部视图(如果你需要返回2个局部视图,因为他们需要在页面的不同位置渲染,然后做2个Ajax调用) –

回答

2

视图(JavaScript)的:

$.ajax({ 
    type: 'GET', 
    url: actionUrl, 
    success: function (data) { 
     $("#results").html(""); 
     $.post('@Url.Action ("FirstPartial")',{data:data.FirstDataSet},function(ret){ 
      $("#results").append(ret); 
      $.post('@Url.Action ("SecondPartial")',{data:data.SecondDataSet},function(ret2){ 
       $("#results").append(ret2); 
      } 
     } 
    } 
}); 

控制器:

public ActionResult FirstPartial(string data) 
{ 
    return PartialView("_FirstPartial", data); 
} 
public ActionResult SecondPartial(string data) 
{ 
    return PartialView("_SecondPartial", data); 
} 

您需要使用部分行动(即返回一个局部视图)。在JavaScript中,获取数据集后,您可以调用另一个部分操作来呈现数据集。

我嵌套了两个Ajax调用来呈现第一个视图下的第二个视图。如果删除嵌套,则第二个可能会在第一个之前呈现。

+0

你的代码很好,但强制把逻辑JavaScript代码因为您使用Razor与JS混合在一起进入MVC视图。 –

+0

@Mahmoodvcs我喜欢这个解决方案。谢谢。但是看起来好像Html.Action在页面加载时触发,无论你把它放在js中。结果,它以空模型崩溃。你有什么提示吗? –

+1

啊!!抱歉。它必须是'@ Url.Action'。编辑答案。 – Mahmoodvcs

0

使你的控制器的方法部分你想返回,然后在Index.cshtml文件做这样的事情:

<script> 
    var Services = { 
    linkToPartial: '@Url.Action('MethodName', 'Controller')' 
    } 
</script> 

此代码将提供您可以在$阿贾克斯成功使用操作链接方法并提供参数。

$("#results").html(""); 
$.ajax({ 
    method: 'GET', 
    url: Services.linkToPartial, 
    data: { 
    argumentName: data.FirstDataSet 
    } 
}).done(function (html) { 
    $('#results').append(html); 
}); 
相关问题