2014-01-15 114 views
0

我想知道如何能夠實現這樣的事情?MVC局部視圖更新模型

我有一個view1,它有一個窗體和部分視圖與列表。

現在,當點擊某個按鈕時,我需要打開另一個列表的模式窗體。通過選擇模態形式的元素之一,我需要在我的view1中更新列表並關閉模態窗體。

+0

無論它在彈出正在獲取其數據?從「主機」頁面的模型或通過Ajax服務器調用? –

+0

最好從服務器調用。 – Toystoj

+0

「some button」在哪裏 - 直接在view1的表單上,還是在部分視圖中? –

回答

0

以下概述了可能的解決方案。選擇你需要的。

您對view1呈現的部分視圖需要實現顯示另一個局部視圖的彈出對話框。

所以從創建彈出部分開始。 彈出的視圖控制器將有這樣的事情

// in FooController 
public ActionResult PopupPartialViewName() 
{ 
    // prepare model for your pop-up 
    return PartialView(PopUpModel); 
} 

在彈出的視圖中,您將有必須更新您的原始部分的列表,並關閉彈出窗口可點擊(或多個)。你有很多變種如何實現這一點,但想法是一樣的 - 一些HTML元素將被分配onclick JavaScript處理程序,它將讀取點擊值並更新原始列表。

<ul id="popupClickableList"> 
    @foreach(var item in Model)// PopUpModel 
    { 
    <li> 
     <input id="[email protected](item.ID)" type="checkbox" value="@item.ID" />     
     <label for="[email protected](item.ID)">@item.DisplayValue</label> 
    </li>  
    } 
<ul> 

現在,在你原來的部分,你需要對彈出式窗口,鏈接或按鈕來打開它的標記,以及初始化和驅動彈出的JavaScript。在這個例子中,我使用jQuery Dialog

<!-- in your original partial --> 
<div id="popupView"></div> 
<a href="#" id="popUpShow">...</a> 

<script type="text/javascript"> 
    $(function() { 
     $('#popupView').dialog({ 
      autoOpen: false, 
      resizable: false, 
      modal: true 
     }); 
     $('#popUpShow').click(function() { 
      $('#popupView').load("@Url.Action("PopupPartialViewName")", function() { 

       // assign the click handler for popupView's clickable list 
       $('#popupClickableList li').click(function() { 
        // get a hold of the clicked value 
        // update element in original list (it's here on this view) 
        $('#popupView').dialog('close'); 
       }); 

       $(this).dialog('open'); 
      }); 
      return false; 
     }); 
    }); 
</script> 

如果我得到下一個午休更多的時間我會把這個在Visual Studio中得到它完全:-)工作