отображение сообщения о различном стиле от одного контроллера для вставки, обновления или ошибки - PullRequest
1 голос
/ 24 января 2020

У меня есть контроллер, с которого я должен показывать уведомление пользователю по трем различным сценариям ios.

  1. успешное добавление данных
  2. успешное обновление данных
  3. в случае ошибки

Для этих различных сценариев ios я хочу отобразить три различных типа стилей уведомлений. Пожалуйста, смотрите прикрепленное изображение. Эти три блока имеют разные стили CSS для значков и стиля рамки.

Это то, что я написал до сих пор в классе моего контроллера

[HttpPost] 
public ActionResult AddorEdit([Bind(Include = "Id,PatternName")] Pattern pattern)
        {
            try
            {
                if (pattern.Id <= 0)
                {
                    // for INSERT OPERATION
                    TempData["UserMessage"] = new { CssClassName = "alert alert-success alert-dismissible", Title = "Success!", Message = "Operation Done." };
                    return RedirectToAction("Success");
                }
                else
                {
                    // for UPDATE OPERATION
                    TempData["UserMessage"] = new { CssClassName = "alert alert-info alert-dismissible", Title = "Success!", Message = "Successful Update" };
                    return RedirectToAction("Success");
                }
            }
            catch (Exception)
            {
                TempData["UserMessage"] = new { CssClassName = "alert alert-danger alert-dismissible", Title = "Success!", Message = "Error." };
                return RedirectToAction("Success");
            }
        }
  1. Возможно ли используйте один TempData для отображения этих трех разных полей, или я должен сделать три разных TempData для этих трех разных случаев.

Когда я пытаюсь использовать вышеуказанную переменную TempData, получаю красное подчеркивание в CssClassName, Title и Message.

// view page
@if (TempData["UserMessage"] != null)
{
    <div class="alert @TempData["UserMessage"].CssClassName">
        <strong>@TempData["UserMessage"].Title</strong> @TempData["UserMessage"].Message
    </div>
}

Css для ящиков для уведомлений

<div class="alert alert-danger alert-dismissible">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <h5><i class="icon fas fa-ban"></i> Alert!</h5>
        Danger ...
</div>
<div class="alert alert-info alert-dismissible">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <h5><i class="icon fas fa-info"></i> Alert!</h5>
            Info alert preview. This alert is dismissable.
</div>
<div class="alert alert-warning alert-dismissible">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <h5><i class="icon fas fa-exclamation-triangle"></i> Alert!</h5>
            Warning alert preview. This alert is dismissable.
</div>
<div class="alert alert-success alert-dismissible">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <h5><i class="icon fas fa-check"></i> Alert!</h5>
            Success alert preview. This alert is dismissable.
</div>

Кроме того, я зашел на этот сайт, когда проводил исследования по этому вопросу, но не знаю, подходит ли он в моем случае или нет. https://exceptionnotfound.net/mvc-in-practice-tempdata/

enter image description here

1 Ответ

0 голосов
/ 24 января 2020

На мой взгляд, у вас есть два основных варианта:

  1. Создание класса / структуры, содержащей требуемые данные, заполнение и добавление его в вашу viewbag / tempdata. Затем на странице просмотра вы можете привести объект к вашему классу.

  2. Преобразовать анонимный объект в строку JSON, а затем преобразовать его обратно на страницу просмотра

Второй вариант, вероятно, самый простой способ сделать это. Просто добавьте using System.Web.Helpers к контроллеру и установите TempData следующим образом:

TempData["UserMessage"] = Json.Encode(new { CssClassName = "alert alert-success alert-dismissible", Title = "Success!", Message = "Operation Done." });

На вашей странице просмотра вы можете использовать следующее:

@if (TempData["UserMessage"] != null)
{
    dynamic userMessage = Json.Decode(TempData["UserMessage"]);
    <div class="@userMessage.CssClassName">
        <strong>@userMessage.Title</strong> @userMessage.Message
    </div>
}

Для Для полноты, вот как вы должны сделать первый вариант:

Создать структуру / класс:

public struct AlertMessage 
{
    public string CssClassName;
    public string Title;
    public string Message;
}

Затем в вашем контроллере установите ваши TempData следующим образом:

TempData["UserMessage"] = new AlertMessage() { CssClassName = "alert alert-success alert-dismissible", Title = "Success!", Message = "Operation Done." };

Затем на вашей странице просмотра вы можете привести ваш объект TempData обратно к вашему AlertMessage следующим образом:

@if (TempData["UserMessage"] != null)
{
    AlertMessage userMessage = (TempData["UserMessage"] as AlertMessage);
    <div class="@userMessage.CssClassName">
        <strong>@userMessage.Title</strong> @userMessage.Message
    </div>
}

Обратите внимание, что если вы делаете это, вы должны добавить @using в верхней части вашего страница просмотра с пространством имен вашей структуры / класса.

...