Подтвердить что ты не робот

Как показать сообщение оповещения, как "успешно вставлено" после вставки в БД, используя ASp.net MVC3

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

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

4b9b3361

Ответ 1

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

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

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

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

Или, в режиме Razor:

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Лично я бы пошел с 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 ready:

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

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

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

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

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

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

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

Ответ 4

Маленькое редактирование

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

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

вместо

return RedirectToAction("Index");