Показывать сообщение через контроллер «Посещаемость уже отмечена»

#javascript #jquery #asp.net-mvc

#javascript #jquery ( jquery ) #asp.net-mvc #jquery

Вопрос:

Я работаю над онлайн-порталом посещаемости, в котором я установил условие в контроллере, чтобы пользователи не могли отмечать посещаемость дважды в день. Им разрешено отмечать посещаемость только один раз в день. Поэтому я хочу показать на странице просмотра «Создать» сообщение о том, что «Посещаемость уже отмечена», если сотрудник отмечает посещаемость во второй раз в ту же дату. Я установил предупреждающее сообщение, но я хочу показать сообщение на странице просмотра, с которой сотрудник отмечает посещаемость. Я много искал его, но не могу найти лучшего.

Вот мой код контроллера

  [Authorize]
        public ActionResult Create()
        {
            Employee employee = JsonConvert.DeserializeObject<Employee>(User.Identity.Name);

            return View(new Attendance() { Emp_Id = employee.Emp_Id });
        }

        [HttpPost]
        public ActionResult Create(Attendance attendance)
        {
            
              if (ModelState.IsValid)
            {
                try
                {
                    var attdate = attendance.Date;
                    var nextdate = attdate.AddDays(1);
                    var id = Convert.ToInt32(Session["UserID"]);
                    var isExist = db.Attendance.FirstOrDefault(i => i.Emp_Id == id amp;amp; i.Date == attdate amp;amp; i.Date < nextdate);
                    
                   if (isExist != null)
                    {
                   //Here i set the alert but i want to show message on view page.
                        return Content("<script language='javascript' type='text/javascript'>alert('Your Attendance is Already Marked');</script>");
                    }
                    else
                    {
                        //var res = tempDate.Date;
                        db.Attendance.Add(attendance);
                        db.SaveChanges();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.InnerException.Message);
                }
            }

            return RedirectToAction("Index", "Attendance");
        }
  

Ответ №1:

Контроллер:

 if (isExist != null)
{
   TempData["Msg"] = "Your Attendance is Already Marked'"
}
  

Вид:

 <body>
@if (TempData["Msg"] != null)  
{  
     <script type="text/javascript">  
         window.onload = function () {  
             alert(@TempData["Msg"]);  
          };  
      </script>  
}  
</body>
  

Ответ №2:

Чтобы отобразить мое сообщение, я делаю это:

Модель:

 public class Alert
    {
        public const string TempDataKey = "TempDataAlerts";
        public string AlertStyle { get; set; }
        public string Message { get; set; }
        public bool Dismissible { get; set; }
    }

public class AlertStyle
    {
        public const string Success = "success";
        public const string Information = "info";
        public const string Warning = "warning";
        public const string Danger = "danger";
    }
  

Мой базовый контроллер:

 public class BaseController: Controller
    {
        public void Success(string message, bool dismissible = false)
        {
            AddAlert(AlertStyle.Success, message, dismissible);
        }

        public void Information(string message, bool dismissible = false)
        {
            AddAlert(AlertStyle.Information, message, dismissible);
        }

        public void Warning(string message, bool dismissible = false)
        {
            AddAlert(AlertStyle.Warning, message, dismissible);
        }

        public void Danger(string message, bool dismissible = false)
        {
            AddAlert(AlertStyle.Danger, message, dismissible);
        }

        private void AddAlert(string alertStyle, string message, bool dismissible)
        {
            var alerts = TempData.ContainsKey(Alert.TempDataKey)
                ? (List<Alert>)TempData[Alert.TempDataKey]
                : new List<Alert>();

            alerts.Add(new Alert
            {
                AlertStyle = alertStyle,
                Message = message,
                Dismissible = dismissible
            });

            TempData[Alert.TempDataKey] = alerts;
        }
    }
  

И в любом контроллере, который мне нужен, достаточно:

 public class PanelController : BaseController
 {
    public ActionResult Index()
    {
       Success($"Hello World!!!",true);
       return View();
    }
 }
  

Частичный просмотр для предупреждения или сообщения

 @{
    var alerts = TempData.ContainsKey(Alert.TempDataKey)
        ? (List<Alert>)TempData[Alert.TempDataKey]
        : new List<Alert>();

    @*if (alerts.Any())
    {
        <hr />
    }*@

    foreach (var alert in alerts)
    {
        var dismissibleClass = alert.Dismissible ? "alert-dismissible" : null;
        <div class="alert alert-@alert.AlertStyle @dismissibleClass">
            @if (alert.Dismissible)
            {
                <button type="button" class="close pull-left" data-dismiss="alert" aria-hidden="true">×</button>
            }
            @Html.Raw(alert.Message)
        </div>
    }
}
  

Наконец:

     <div class="mt-alerts">
        @{ Html.RenderPartial("_Alerts"); }
    </div>