代码之家  ›  专栏  ›  技术社区  ›  Ken-F

如何将数据库中特定行的计数器添加到MVC布局[重复]

  •  0
  • Ken-F  · 技术社区  · 6 年前

    如何使导航栏中的徽章在所有导航中捕获我的控制器警告的应用程序信息?

    在我的ControllerWarning中,我有一个函数,当requesited返回一个Json格式的数值。

    namespace VS.Controllers
    {
        public class ControllerWarning : Controller
        {
            private VSContext db = new VSContext();
    
            public JsonResult GetWarning(string user)
            {
                DateTime dt = DateTime.Now.Date;
                int contWarning = 0;
    
                var listaAvisos = db.Warnings.Where(a => a.User== user).ToList();
                var l = new List<Aviso>();
    
                foreach (var item in listaAvisos)
                {
                    var res = item.Data - dt;
                    item.QtdDias = res.Days;
    
                    if (res.Days <= 5 && item.Enviado != true)
                    {
                        contWarning++;
                    }
                }
    
                return Json(contWarning);
            }
          }
    
          public ActionResult Index(){...}
          public ActionResult Details(int? id){...}
          public ActionResult Details(Warning warning){...}
     }
    

    cshtml中的Navbar有一个徽章,应该收集WarningController返回的GetWarning(string user)

    <li>
        @Html.ActionLink("Warning", "Index", "Warnings")
             <span class="badge">
    
                     @*HERE VALUE RECEIVED GETWARNING*@
                     GetWarning(string user)
    
             </span>
    </li>
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Shyju    6 年前

    您可以让action方法返回徽章的HTML,其中还包括数据(警告号)。

    public class WarningController : Controller
    {
       public ActionResult Badge()
       {
          int contWarning = 10; // temp hard coded value for demo;
          // Replace the hard coded value 
          // with your existing code to get the data from database
          return PartialView("Badge",contWarning);
       }
    }
    

    现在在你的 Badge.cshtml ,它被打印到 int 键入,呈现所需的HTML。

    @model int
    <span class="badge">
        @Model
    </span>
    

    _Layout.cshtml ),使用 Html.Action 方法。

     @Html.Action("Badge","Warning")
    

    PartialView 而不是 View 方法。如果您的Badge action方法返回的视图具有相同的布局文件,则将导致无限循环,并且您将获得StackOverflow异常。