Как отобразить Alert Message как «успешно вставлено» после вставки в БД с использованием ASp.net MVC3 - PullRequest
16 голосов
/ 09 ноября 2011

Как написать код для отображения сообщения с предупреждением: «Успешно зарегистрирован», после сохранения пользовательских данных в базе данных, используя MVC

Я использую Asp.Net MVC3, C #, Entity Model.

Ответы [ 4 ]

26 голосов
/ 09 ноября 2011

Попробуйте использовать TempData:

public ActionResult Create(FormCollection collection) {
  ...
  TempData["notice"] = "Successfully registered";
  return RedirectToAction("Index");
  ...
}

Затем в представлении индекса или на главной странице и т. Д. Вы можете сделать это:

<% if (TempData["notice"] != null) { %>
  <p><%= Html.Encode(TempData["notice"]) %></p>
<% } %>

Или вПросмотр бритвы:

@if (TempData["notice"] != null) {
  <p>@TempData["notice"]</p>
}

Цитата из MSDN (по состоянию на 2014 г. страница больше не существует, архивная копия здесь ):

Метод действия может хранить данныев объекте TempDataDictionary контроллера, прежде чем он вызывает метод контроллера RedirectToAction для вызова следующего действия.Значение свойства TempData хранится в состоянии сеанса.Любой метод действия, вызываемый после установки значения TempDataDictionary, может получить значения из объекта, а затем обработать или отобразить их.Значение TempData сохраняется до тех пор, пока оно не будет прочитано или пока не истечет время ожидания сеанса.Сохранение TempData таким способом включает такие сценарии, как перенаправление, поскольку значения в TempData доступны за пределами одного запроса.

5 голосов
/ 09 ноября 2011

«Лучший» способ сделать это - установить свойство для объекта просмотра после успешного обновления. Затем вы можете получить доступ к этому свойству в представлении и соответственно информировать пользователя.

Сказав, что было бы возможно вызвать предупреждение из кода контроллера, сделав что-то вроде этого -

public ActionResult ActionName(PostBackData postbackdata)
{
    //your DB code
    return new JavascriptResult { Script = "alert('Successfully registered');" };
}

Вы можете найти дополнительную информацию в этом вопросе - Как отобразить «Окно сообщений» с помощью контроллера MVC3

3 голосов
/ 09 ноября 2011

Лично я бы пошел с AJAX.

Если вы не можете переключиться на @Ajax... помощников, я предлагаю вам добавить пару свойств в вашу модель

public bool TriggerOnLoad { get; set; }
public string TriggerOnLoadMessage { get; set: }

Изменить свойпредставление для строго типизированной модели через

@using MyModel

Перед возвратом представления, в случае успешного создания, сделайте что-то вроде

MyModel model = new MyModel();
model.TriggerOnLoad = true;
model.TriggerOnLoadMessage = "Object successfully created!";
return View ("Add", model);

, затем, по вашему мнению, добавьте

@{
   if (model.TriggerOnLoad) {
   <text>
   <script type="text/javascript">
     alert('@Model.TriggerOnLoadMessage');
   </script>
   </text>
   }
}

Конечно, внутри тега вы можете делать все, что захотите, событие объявляет функцию готовности jQuery:

$(document).ready(function () {
   alert('@Model.TriggerOnLoadMessage');
});

Пожалуйста, не забудьте сбросить свойства модели при успешном оповещении о выбросе.

Еще одна приятная вещь в MVC заключается в том, что вы можете фактически определить EditorTemplate для всего этого, а затем использовать его в своем представлении с помощью:

@Html.EditorFor (m => m.TriggerOnLoadMessage)

Но в случае, если вы хотите создать такую ​​вещь, возможно,Лучше определить свой собственный класс C #:

class ClientMessageNotification {
    public bool TriggerOnLoad { get; set; }
    public string TriggerOnLoadMessage { get; set: }
}

и добавить свойство ClientMessageNotification в вашу модель.Затем напишите EditorTemplate / DisplayTemplate для класса ClientMessageNotification, и все готово.Хороший, чистый и многоразовый.

0 голосов
/ 27 января 2016

Маленькая правка

Попробуйте добавить

return new JavascriptResult() { Script = "alert('Successfully registered');" };

вместо

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