2015-04-08 61 views
0

我有一个页面部分视图,其中包含DevEx ComboBox添加按钮和DevEx GridView(我省略了GridView代码)。页面显示正确与该部分视图,只有我有刷新它的问题。MVC.NET刷新(更新)部分视图没有AJAX

//_ProductAppsGridViewPartial 
    <div class="form-horizontal"> 
    <h4>Apps</h4> 
    @using (Html.BeginForm("AppsGridViewPartialAddNew", "Products", new { ProductID = ViewBag.ProductID })) 
    { 
     <div class="form-group"> 

      <h5>Add new App:</h5> 
     @Html.DevExpress().ComboBox(settings => 
     { 
      //..do some settings for ComboBox - some code omitted 
      settings.Properties.ValueField = "ApplicationID"; 
      settings.Properties.TextField = "Name"; 
     }).BindList(Model.AppsNotInProduct).GetHtml() 
      <input type="submit" value="Add" class="btn btn-default" /> 
     </div> 
    } 
</div> 

我有我的控制器,增加了选择的应用程序数据库,并返回相同的(但刷新)模型PartialView行动,但响应仅显示局部视图。下面是更新数据库之后返回PartialView控制器的行动的一部分:

public ActionResult ProductAppsGridViewPartialAddNew(int ProductID) 
     {  
      //....update DB code - WORKS FINE 
      .. 
      var model = GetProductAppsPartialModel(ProductID); 
      ViewBag.ProductID = ProductID; 
      ViewBag.CanEdit = true; 
      return PartialView("_ProductAppsGridViewPartial", model); 
     } 

是否有可能刷新wihout AJAX的局部视图,也许这是我上面写的?所以这里的主要问题是,我得到的新页面只显示部分视图。

回答

0

要刷新页面的一部分,您将需要使用ajax来替换所需的内容。您还需要使用JavaScript重新呈现部分中包含的HTML。 MVC带有一些Ajax助手,或者你可以用jquery自己做。目前,操作结果正在按照请求返回部分内容,但浏览器正被告知正在接收一个全新的页面并正在显示。

添加此link to Microsoft ajax以显示一些选项。

我会使用jquery自己做这个。还要记住,mvc是一个服务器端框架,可以帮助您将http消息返回给浏览器。你正试图操纵客户端的东西。实时客户端更新总是​​需要ajax来获取数据。替换DOM中的项目需要某种形式的JavaScript。像jquery这样的库使得这更容易。看看jquery ajax here

+0

谢谢@Luthervd。那么没有ajax和JS就没有办法刷新局部?我认为如果我返回部分视图,MVC足够聪明,可以刷新部分视图的区域:)。我是MVC的新手,所以我对可能出现的愚蠢问题表示抱歉。 – vpetrovic

+0

看看我的修改答案 – Luthervd

+0

谢谢!我得到它的工作!现在我有另一个问题,但它是DevEx的一个问题:组合框和网格是部分视图的一部分,当我从CB中添加一些东西后,刷新它在网格中而不是在CB中时,这很好。但是,当我在DevEx Grid中调用Delete链接时,它会接受一个局部视图并将其显示在警报对话框中。我想,网格期望纯粹的网格HTML的行动...我试图让CB和网格同步生成一个部分视图,但没有运气... – vpetrovic

0

我认为你需要尝试这段代码。 注意这里,我们需要保持Ajax调用用于更新的局部视图

@using (Ajax.BeginForm("ActionName", "Controller", new { model = @Model.ID }, 
new AjaxOptions 
{ 
OnSuccess = "onSuccessRefresh " 
})) 
{ 
<table> 
<td> 
</td> 
<td> <input type="button" value="AddValue" /> </td> 
</table> 
} 

手柄使用jQuery代码的onSuccess事件: -

function onSuccessRefresh { 
// refersh your page or table 
} 

这不是完整的代码。但我认为这对你有所帮助