Zakładając, że edytuje dane użytkownika. W przypadku niepowodzenia pojawiają się odpowiednie komunikaty za sprawą tego, że jest zrobiona walidacja za pomocą kontrolek. ModelState sprawdza czy wszystkie pola zostały dobrze wypełnione. Jeśli zostały dobrze wypełnione chciałbym wyświetlać komunikat o powodzeniu operacji. Mógłbym wywoływać wtedy metodę z kontrolera i zwracać widok z komunikatem o powodzeniu operacji. Ale czy to w tym przypadku nie jest zbędne? Można to zrobić jakoś inaczej?
Użyj TempData["success"] = "Udało się!" i widoku obsłuż wyświetlanie powiadomienia
Masz jakiś tutorial do tego? Bo za bardzo nie wiem o co chodzi.
O coś tego typu chodzi?
public HttpResponseMessage GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
var message = string.Format("Product with id = {0} not found", id);
HttpError err = new HttpError(message);
return Request.CreateResponse(HttpStatusCode.NotFound, err);
}
else
{
return Request.CreateResponse(HttpStatusCode.OK, item);
}
}
Że zwracanie
https://stackoverflow.com/questions/10732644/best-practice-to-return-errors-in-asp-net-web-api
Najprościej to będzie zwrócić w odpowiedzi akcji kontrolera do której wysyłasz formularz status wykonania operacji w postaci htmla, który sobie potem gdzieś dokleisz.
W tym przypadku to jest zbędne. Po poprawnym zapisie edycji można pokazać listę albo podgląd edytowanych danych. Na tych wioskach listy lub podglądu można niby coś wyświetlić ale niekoniecznie.
w kontrolerze po poprawnym dodaniu/edycji danych piszesz
TempData["success"] = "Udało się!"
Możesz sobie zrobić rozszerzenie do tego :)
a w widoku (ja to w głównym layout dodaje)
var successMessage = TempData["success"];
if(successMessage != null)
{
<div class='alert-success'>@Html.Raw(successMessage)</div>
}
to samo możesz zrobić z błędem lub ostrzeżeniem :)
TempData używa się jak chesz coś przenieść pomiędzy akcjami kontrolera... Bez sensu.
Po co ci jakiś SuccessMessage? Zwrócenie samego nulla do widoku nie wystarczy ?
W widoku :
@ViewBag.SuccessMsg
W kontrolerze
if (ModelState.IsValid)
{
ViewBag.SuccessMessage = "
Zapisano!
";}</p>
To tak najprościej i najszybciej, ale ViewBagi nie są dobrym pomysłem.
Bardziej zaawansowane to użycie jakieś biblioteki albo stworzenie jakiegoś wspólnego layout'u i obsłużenie tego jakimś serwisem.
Smutny Programista napisał(a):
TempData używa się jak chesz coś przenieść pomiędzy akcjami kontrolera... Bez sensu.
Fajnie, że skrytykowałeś, ale może podałbyś od razu słuszne rozwiązanie?
A nie wystarczy zwrócić, ten sam model i użyć.
@Html.ValidationSummary()
Komunikaty błędu walidacji dla propertisów, można określić w VM.
Możesz tak
@{
if (ViewData.ModelState.IsValid)
{
<div>Success Message</div>
}
else
{
<div>Error Message</div>
Html.ValidationSummary(true, "", new { @class = "text-danger" });
}
}
TempData[] Bedzie ci potrzebny jeśli chcesz robić post redirect to get, jako transporter VM
W przypadku sukcesu, to PRG jest chyba oczywisty w 99% przypadków, więc rozwiązanie oparte o IsValid
jest właśnie bez sensu.
A kto powidział, że on posta chce używać ?, Jak chcesz to sobie przekaż VM w TempData[] jak nie to samą wiadomość. Ja bym przekazał po prostu True do proppsa w VM IsSucces ale rób sobie jak chcesz...