2014-04-08 54 views
0

我有一個數字「徽章」值,我試圖在我的MVC 5.1應用程序的菜單上顯示。模仿從MVC控制器jQuery隱藏

<span id="myBadge" class="badge menu-badge">@SessionData.MyCount</span> 

我有一個SessionData類,所以我不必傳遞魔術字符串。

public class SessionData 
{ 
    const string MyCountKey = "MyCount"; 

    public static int MyCount 
    { 
     get { return HttpContext.Current.Session[MyCountKey] != null ? (int)HttpContext.Current.Session[MyCountKey] : 0; } 
     set { HttpContext.Current.Session[MyCountKey] = value; } 
    } 
} 

徽章最初是由執行數據庫調用的基礎控制器填充的。

SessionData.MyCount = CountThingsFromDatabase(); 

我使用在前端的JavaScript & jquery的作爲用戶修改數據。如果計數達到0,jquery命令將隱藏「0」徽章。

function setBadgeValue(badgeName, count) { 
    $(badgeName).html(count); 
    count > 0 ? $(badgeName).show() : $(badgeName).hide(); 
} 

所有這一切工作正常,但有一個例外。當控制器檢索到「0」的計數時,我想以與jquery show/hide命令相同的方式從視圖中隱藏徽章。前端jQuery的作品奇妙,但我不確定如何從控制器方面完成同樣的效果。

任何幫助將不勝感激。

更新1:

我有利用Telerik的/劍道對象的景色。這是從顯示Kendo網格的視圖。每個網格行都有一個綁定到此方法的按鈕。我不確定它會發布整個視圖/控制器,因爲它大部分是Kendo相關的。

function addToCart(e) { 
    // Get the grid data 
    var grid = $("#Grid").data("kendoGrid"); 
    var dataItem = grid.dataItem(grid.select()); 

    // Add item to the cart 
    $.ajax({ 
    url: 'Search/AddCart', 
    data: { itemId: dataItem.ItemId }, 
    success: function() { 
     $('_MyBadge').html(); 
     $('_Layout').html(); 

     // Update the count 
     setBadgeValue("#myBadge", 1); 
    }, 
    error: function (xmlHttpRequest, textStatus, errorThrown) { 
     alert('Failed to add item #' + dataItem.itemId + ' to your cart.\nStatus: ' + textStatus + '\nError: ' + errorThrown); 
    } 
    }); 
} 

回答

1

不需要以任何方式使用控制器,如果您的計數爲零,只需將徽章初始隱藏在視圖中即可。

<span id="myBadge" class="badge menu-badge" style="display: @(SessionData.MyCount > 0 ? "block" : "none");">@SessionData.MyCount</span> 
+0

我確實嘗試過,但我遇到了與David Hirst的建議相同的問題。它在加載時隱藏數據,但未來的jQuery顯示/隱藏不起作用。不過,我認爲我們正在設定風格的正確軌道。我只需要弄清楚要設置的內容。 – Rethic

+1

我回來了。這工作完美,我忘了刷新我的緩存。謝謝! – Rethic

2

如何在視圖上做到這一點?

@if (SessionData.MyCount == 0) 
{ 
    <span id="myBadge" class="badge menu-badge" style="display: none;">@SessionData.MyCount</span> 
} 
else 
{ 
    <span id="myBadge" class="badge menu-badge">@SessionData.MyCount</span> 
} 
+0

當我嘗試這個時,控制器操作顯示&隱藏適當,但jQuery顯示/隱藏功能現在更長時間工作在每個頁面上。 – Rethic

+0

向上發佈您的整個腳本或至少調用您的函數的部分。 –