2015-04-08 85 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 
} 

這不是完整的代碼。但我認爲這對你有所幫助