2017-02-13 25 views
1

我的问题是这样的: 我必须点击一个按钮后刷新的局部视图。此PartialView包含一个表格,其中填充了一个foreach循环。我使用一个控制器动作ValidateControl,它给了我正确的数据(我已经手动检查过)。但是,使用下面的代码,当我点击我的按钮并完成治疗时,表格是空的!它甚至不能正确显示。C#MVC 5剃刀:更新与阿贾克斯的局部视图失败

我检查了,似乎unobstrusive Ajax和JavaScript已启用。我从我的控制器操作中获得了正确的结果,但它似乎没有正确显示/显示。我已经检查了很多东西,但是我似乎很快就来了!你能帮我解决这个问题吗?

视图(相关代码只):

<table class="contentTable contentTable-evo"> 
       <thead> 
        <tr> 
         <th class="noWrap width1percent"> 
          // Multiple THs with content, snipped out for length 
         </th> 
        </tr> 
       </thead> 
       <tbody id="tableControl">      
         @Html.Partial("_ControlTable") 
       </tbody> 
       </table> 

局部视图(仅适用于相关的代码):

@model PagedList.IPagedList<ProjectName.Models.ArticleControl> 
@using PagedList.Mvc 
@using PagedList 
@{ 
    Layout = null; 
    int i = 0; 
} 
@foreach (var item in Model) 
      { 
       if (item.IsNewValue == 1) 
       { 
     <tr> 
      <td class="noWrap width1percent tri"> 
// Loads of <tr>s and <td>s after that. 

脚本(相关代码只):

function validateResults(data) { 
     $.ajax({ 
      url: '@Url.Action("ValidateControl", "Article")', 
      type: "POST", 
      data: { data:data} 
     }).complete(function (result) { 
      $("#tableControl").html(result); 
      $("#divLoading").hide(); 
     }); 
    } 

编辑 ValidateControl行动(相关代码只):

using (var ctxt = new Connection(connectionName)) 
    { 
     //Loads of code that isn't relevant but adds data to a database 
     ctxt.SaveChanges(); 

     var control = new ArticlesControl(null, 0, 20); 
     return PartialView("_ControlTable", new StaticPagedList<ArticleControl>(control, 1, 20, control.NumberOfArticlesShown)); 
} 

与最终代码编辑: 为了方便那些你从谷歌的到来,脚本必须居然是这样为了工作:

function validateResults(data) { 
    $.ajax({ 
     url: '@Url.Action("ValidateControl", "Article")', 
     type: "POST", 
     data: { data:data}, 
     success: function (result) { 
      $("#tableControl").html(result); 
      $("#divLoading").hide(); 
     } 
    }); 
} 
+0

如何你ValidateControl行动样子? –

+0

编辑添加ValidateControl。 –

回答

1

当我这样做的时候,我对你成功的一部分 - 这可能是你的问题。下面应该工作

function validateResults(data) { 
    $.ajax({ 
     url: '@Url.Action("ValidateControl", "Article")', 
     type: "POST", 
     data: { data:data}, 
     success: function($data) { 
      $("#tableControl").html(result); 
      $("#divLoading").hide(); 
     } 
    }); 
+0

...那么,你会看看那个。是的,它的工作正常。非常感谢! –

+1

@FrédéricLiard乐意帮忙 - 你也可以捕捉失败,失败:function($ data){....}' – Rick

0

如果您的“结果”变量正在与预期的数据正确更新,可能是部分视图容器有点奇怪。

尝试增加你的结果特定容器的tableControl TBODY内,甚至以外,在完全不同的地方,只是为了检查是否从AJAX调用,查看数据传输是否正常工作。

一旦你有你的回应到视图容器,你只需要直到你展示它,你想让它与DOM来调整。