2011-11-09 18 views

Odpowiedz

25

Spróbuj użyć TempData:

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

Następnie w widoku indeksu lub strony wzorcowej, itd.Można to zrobić:

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

Lub, w widoku Razor:

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

Cytat z MSDN (strona nie istnieje już od 2014 roku, archiwizowane kopie here):

Metoda działania może przechowywać dane w obiekcie TempDataDictionary kontrolera, zanim wywoła metodę RedirectToAction kontrolera, aby wywołać następną akcję. Wartość właściwości TempData jest przechowywana w stanie sesji. Każda metoda działania, która jest wywoływana po ustawieniu wartości TempDataDictionary, może uzyskać wartości z obiektu, a następnie je przetwarzać lub wyświetlać. Wartość TempData jest zachowywana, dopóki nie zostanie odczytana lub upłynie limit czasu sesji. Trwałe TempData w ten sposób włącza scenariusze takie jak przekierowanie, ponieważ wartości w TempData są dostępne poza pojedynczym żądaniem.

4

Najlepszym sposobem na to byłoby ustawienie właściwości obiektu widoku po pomyślnym zakończeniu aktualizacji. Następnie można uzyskać dostęp do tej właściwości w widoku i odpowiednio poinformować użytkownika.

Mimo, że byłoby to możliwe, aby wywołać alarm z kodem sterownika robiąc coś takiego -

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

można znaleźć dalsze informacje w tej kwestii - How to display "Message box" using MVC3 controller

+1

, jak to zrobić ...? Iam przy użyciu Entity Model..this jest mój kodu public ActionResult Create() { spróbuj { return View(); } catch (Exception ex) { return LogException (ex); } } – user581007

+0

[HttpPost] ActionResult publiczny Tworzenie (kolekcja FormCollection) { spróbować { var objmsg = new Models.motds(); tblMessage msg = new tblMessage(); msg.CreatedDate = System.DateTime.Now; msg.ModifiedDate = System.DateTime.Now; // domyślny identyfikator CreatedDate UpdateModel (msg); objmsg.AddMessage (msg); return RedirectToAction ("Index"); } } catch (Exception ex) { } } – user581007

+0

Spróbuj dodać 'return new JavascriptResult {Script =" alert ("Pomyślnie zarejestrowany"); " }; 'w miejsce' return RedirectToAction ("Index"); ' – ipr101

3

osobiście bym iść z AJAX.

Jeśli nie można przełączyć się @Ajax... pomocników, proponuję dodać kilka właściwości w modelu

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

Zmień swój pogląd na silnie typami modelu poprzez

@using MyModel 

przed zwróceniem Zobacz, w przypadku pomyślnego utworzenia, wykonaj czynności podobne do:

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

następnie w widoku, dodaj

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

Oczywiście wewnątrz znacznika można zdecydować się robić wszystko co chcesz, wydarzenie zadeklarować jQuery gotową funkcję:

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

Proszę pamiętać, aby przywrócić właściwości modelu po udanej emisji alertu.

Kolejną miłą rzeczą MVC jest to, że rzeczywiście można zdefiniować EditorTemplate za to wszystko, a następnie używać go w widoku poprzez:

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

Jednak w przypadku, gdy chcesz zbudować coś takiego, może lepiej zdefiniować własną klasę C#:

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

i dodać właściwość ClientMessageNotification w modelu. Następnie napisz EditorTemplate/DisplayTemplate dla klasy ClientMessageNotification i gotowe. Ładne, czyste i wielokrotnego użytku.

0

Mała Edit

spróbuj dodać

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

zamiast

return RedirectToAction("Index"); 
Powiązane problemy