2014-04-08 53 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

向上发布您的整个脚本或至少调用您的函数的部分。 –