#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>