2012-01-09 54 views
0

我想实现一种Ajax方式来更新我的数据网格。到目前为止,我已经编写了以下在我的控制器:实现Ajax以返回MVC3中的HTML.Partial页面的问题

public ActionResult Detail(string ac, string me) {  
    vm.AdminDetails = _link.Detail(ac + me).ToList();  
    if (Request.IsAjaxRequest())   
     return PartialView(vm);  
    return View(vm); 
} 

我的观点的快照看起来是这样的:

@model ViewModels.Shared.BaseViewModel 
@{ 
    Layout = "~/Areas/Administration/Views/Menus/_Layout.cshtml"; 
} 

@section content { 
<div class="bdy_box"> 
     <div id="detailData" class="rep_tb0"> 
     // code to generate the list of data 
     </div> 
</div> 

我的JavaScript的快照看起来是这样的:

function reload(entity, pk) { 
    $.ajax({ 
     url: "/Administration/" + entity + "s/Detail", 
     data: { pk: pk }, 
     dataType: 'html', 
     cache: false, 
     success: function (responseText) { 
      $('#detailData').html(responseText); 
     } 
    }); 
}; 

数据确实得到返回,但我的问题是其他数据也得到返回。当我看看detailData div的内容时,我看到的远远超过我需要的。比如我看到类似以下内容:

<div class="rep_tb0" id="detailData"> 
<title></title>  
<meta content="" name="title">  
<meta content="" name="description">  
<meta content="" name="keywords">  
<link type="image/x-icon" href="/Content/Favicons/default.ico" rel="shortcut icon">  
<link type="text/css" rel="stylesheet" href="/Content/Stylesheets/Style203.css"> 

是否有一个原因,它显示了我这一切,以及它如何我可以停止放映的所有信息这个头型?

回答

1

梅丽莎,

我假设你已经称为partialview _detail.cshtml(如果没有,你需要创建一个)?

我相信你可能实际上是基于你的示例调用'full'view detail.cshtml。我建议你沿着以下几行呼叫你的行动:

public ActionResult Detail(string ac, string me) {  
    vm.AdminDetails = _link.Detail(ac + me).ToList();  
    if (Request.IsAjaxRequest())   
     return PartialView("_details", vm);  
    return View(vm); 
} 
+0

没有局部视图。这是Ajax数据回到JavaScript。 – 2012-01-09 09:31:46

+0

梅丽莎,你需要有一个局部视图才能工作,否则,你的div总是会填满整个视图的内容。用所需的“部分”元素创建一个局部视图,你会很开心。 (同样,根据我上面的回复,修改你的行动) – 2012-01-09 10:04:27

+0

Jim。按照斯坦克在这篇文章中所说的话,我不认为他说我需要局部的观点。也许我只是读错了,但似乎他说这将是好的,并没有提到另一种观点http://stackoverflow.com/questions/8782879/how-can-i-code-a-refresh-of -a-HTML-使用的Ajax功能于MVC3的RenderPartial-/ 8782887#comment10958218_8782887 – 2012-01-09 10:47:16

0

您需要确保您的请求是使用X-Requested-With HTTP标头进行设置的。用开发工具插件检查你的浏览器(在Chrome和IE9中内置,在Firefox中为Firebug)。您可能要翻一番下不同的浏览器检查你的代码有与IsAjaxRequest(可能依赖于浏览器设置)过去存在的不同问题,原因不明