我有大約15個部分視圖需要根據用戶的菜單選項卡進行顯示。基本上我有這15個菜單選項卡在側面,並基於用戶點擊這些選項卡,我將顯示該頁面上該選項卡的內容。使用javascript在ASP.NET MVC中加載部分視圖
另外我在這裏使用Knockout。
所以我有這15個淘汰賽observables(self.tab_A(), self.tab_B(), ...self.tab_N()
)頁面第一次加載時填充。
我有的代碼是這樣的。 這是視圖。
<ul id="tabs">
<li>
<a data-bind="click: function(){ $root.ShowHideDiv(tab_A.id); }" style="cursor: pointer;">
Tab A
</a>
</li>
<li>
<a data-bind="click: function(){ $root.ShowHideDiv(tab_B.id); }" style="cursor: pointer;">
Tab B
</a>
</li>
...
...
</ul>
部分視圖是預先加載的,但從用戶的視圖中隱藏。
<ul>
<li id="tab_A" style="display: none" class="hiddenDivs">
@{Html.RenderPartial("~/Views/Claims/FroiReport/_Insurer.cshtml");}
</li>
<li id="tab_B" style="display: none" class="hiddenDivs">
@{Html.RenderPartial("~/Views/Claims/FroiReport/_Insurer.cshtml");}
</li>
</ul>
在點擊事件中使用腳本顯示div。
self.ShowHideDiv = function (tabToShow) {
console.log(tabToShow);
$('.hiddenDivs').html('');
$('#' + tabToShow).show();
};
現在的問題是,使用此代碼的UI工作正常3-4的意見,但設計是因爲有這些被隱藏了太多的div(我不可能打破了剩下的意見肯定在這裏)。
因此,我正在研究其他選項,我只會在運行時加載特定的視圖。當用戶點擊選項卡時,獲取局部視圖並加載它。
因此,我想是這樣的:
self.ShowHideDiv = function (tabToShow) {
$('.hiddenDivs').html('');
var view = getValueFromDict(dict, tabToShow); //gets the needed view from a dictionary in "~/Views/Products/CoolProducts/_ItemOne.cshtml" format
$('.hiddenDivs').load('/Claims/ReturnPartialView/?partialViewName=' + view);
};
但是,這並不工作,因爲我沒有與這些意見相關的任何動作/控制器,我無法直接加載使用javascript的視圖/ jQuery的。
我試過的另一個選擇是創建一個返回部分視圖的控制器。
public ActionResult ReturnPartialView(string partialViewName)
{
return PartialView(partialViewName);
}
並調用它像這樣:
self.ShowHideDiv = function (tabToShow) {
$('.hiddenDivs').html('');
var view = getValueFromDict(dict, tabToShow);
$('.hiddenDivs').load('/MyController/ReturnPartialView/?partialViewName=' + view);
}
現在這個加載與視圖相關聯,我需要的觀點,但淘汰賽觀察到即將爲空做這個。
我聽說KO模板可以用於我的場景,但還沒有嘗試過KO模板來解決這個問題(接下來我將介紹它)。我想看看是否有人在不使用KO模板的情況下解決了我的問題。
非常感謝您耐心的努力去理解這一點。
你必須通過ajax get/post方法命中控制器,然後返回一個局部視圖。 –
因此,如果沒有調用此視圖的操作,那麼我無法使用javascript/ajax加載它? – pso
您必須點擊控制器的操作.. –