Как сделать так, чтобы Badge в navbar, расположенном в _Layout.cshtml, получал значение - PullRequest
0 голосов
/ 02 сентября 2018

Как сделать значок, находящийся в панели навигации, который находится в захвате _Layout.cshtml, во всей навигации по моему приложению с информацией о моих ControllerWarnings?

В моем ControllerWarning у меня есть функция, которая при запросе возвращает числовое значение в 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){...}
 }

Навбар, расположенный в _Layout.cshtml, имеет значок, который должен собирать возврат GetWarning (пользователь строки) из WarningController

<li>
    @Html.ActionLink("Warning", "Index", "Warnings")
         <span class="badge">

                 @*HERE VALUE RECEIVED GETWARNING*@
                 GetWarning(string user)

         </span>
</li>

1 Ответ

0 голосов
/ 02 сентября 2018

Ваш метод действия может вернуть 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), вызовите эту визуализацию для вывода этого метода действия Badge, используя метод Html.Action.

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

Убедитесь, что вы возвращаете частичное представление (которое не имеет собственного макета), используя PartialView вместо View метода. Если ваш метод действия Badge возвращает представление с тем же файлом макета, это вызовет бесконечный цикл, и вы получите исключение StackOverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...