实现Ajax以返回MVC3中的HTML.Partial页面的问题

时间:2012-01-09 08:29:19

标签: jquery asp.net-mvc asp.net-mvc-3

我正在尝试实现Ajax方式来更新我的数据网格。到目前为止,我已经在我的控制器中编写了以下代码:

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">

有没有理由告诉我这一切,如何阻止它显示所有这些标题类型的信息?

2 个答案:

答案 0 :(得分:1)

梅丽莎,

我假设您有一个名为_detail.cshtml的部分视图(如果没有,您需要创建一个)?

我相信您实际上可能正在根据您的示例调用“完整”视图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); 
} 

答案 1 :(得分:0)

您需要确保在设置X-Requested-With HTTP标头时发出请求。检查使用开发人员工具添加到您的浏览器(在Chrome和IE9中内置,在Firefox中获取Firebug)。您可能希望在不同浏览器下仔细检查您的代码,因为过去使用IsAjaxRequest发生了不同的无法解释的问题(可能取决于浏览器设置)