Я думаю, есть несколько способов добиться этого.
1) Используйте ViewModel, который может хранить List<string> Errors
, который вы можете передать обратно в свое представление. Хотя сделать это для всех представлений было бы очень повторяющимся и непростым в обслуживании.
2) Используйте TempData для хранения сообщений об ошибках, а не в вашей ViewModel. Таким образом, вы можете проверить в своем _Layout.cshtml, есть ли какие-либо элементы в TempData, и отобразить их любым способом (это произойдет со всеми вашими представлениями).
3) Используйте toastr.js и подход TempData, чтобы вместо этого отобразить приятный тост. Начните с реализации POCO, который включает Enum для различных типов ответов, доступных в toastr.js, т. е. Error, Info, Success, Warning. Затем создайте файл BaseController.cs, который будут реализовывать ваши контроллеры, см. пример ниже.
Затем в ваших контроллерах вы можете вызвать CreateNotification(AlertType.Error, "Это тестовое сообщение.", "Ошибка");
Наконец, вам нужно поместить логику в файл _Layout.cshtml, чтобы использовать уведомления. Убедитесь, что вы добавили ссылку на toastr.js и его CSS-файл, и см. ниже пример того, как его подключить:
Полный пример:
Уведомление.cs
```
public class Alert
{
public AlertType Type { get; set; }
public string Message { get; set; }
public string Title { get; set; }
}
public enum AlertType
{
Info,
Success,
Warning,
Error
}
```
BaseController.cs
public override void OnActionExecuting(ActionExecutingContext context)
{
GenerateNotifications();
base.OnActionExecuting(context);
}
public void CreateNotification(Notification.AlertType type, string message, string title = "")
{
Notification.Alert toast = new Notification.Alert();
toast.Type = type;
toast.Message = message;
toast.Title = title;
List<Notification.Alert> alerts = new List<Notification.Alert>();
if (this.TempData.ContainsKey("alert"))
{
alerts = JsonConvert.DeserializeObject<List<Notification.Alert>>(this.TempData["alert"].ToString());
this.TempData.Remove("alert");
}
alerts.Add(toast);
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
string alertJson = JsonConvert.SerializeObject(alerts, settings);
this.TempData.Add("alert", alertJson);
}
public void GenerateNotifications()
{
if (this.TempData.ContainsKey("alert"))
{
ViewBag.Notifications = this.TempData["alert"];
this.TempData.Remove("alert");
}
}
Макет.cshtml
@if (ViewBag.Notifications != null)
{
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
List<Notification.Alert> obj = JsonConvert.DeserializeObject<List<Notification.Alert>>(ViewBag.Notifications, settings);
foreach (Notification.Alert notification in obj)
{
switch (notification.Type)
{
case Notification.AlertType.Success:
<script type="text/javascript">toastr.success('@notification.Message', '@notification.Title');</script>
break;
case Notification.AlertType.Error:
<script type="text/javascript">toastr.error('@notification.Message', '@notification.Title');</script>
break;
case Notification.AlertType.Info:
<script type="text/javascript">toastr.info('@notification.Message', '@notification.Title');</script>
break;
case Notification.AlertType.Warning:
<script type="text/javascript">toastr.warning('@notification.Message', '@notification.Title');</script>
break;
}
}
}
person
Ian Auty
schedule
18.01.2016