Jak wyświetlać komunikat o prawidłowym wykonaniu operacji? Asp.net mvc

0

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?

1

Użyj TempData["success"] = "Udało się!" i widoku obsłuż wyświetlanie powiadomienia

0

Masz jakiś tutorial do tego? Bo za bardzo nie wiem o co chodzi.

0

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

0

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.

1

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.

1

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 :)

0

TempData używa się jak chesz coś przenieść pomiędzy akcjami kontrolera... Bez sensu.

0

Po co ci jakiś SuccessMessage? Zwrócenie samego nulla do widoku nie wystarczy ?

0

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.

0
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?

0

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.

0

Możesz tak


                    @{
                        if (ViewData.ModelState.IsValid)
                        {
                            <div>Success Message</div>
                        }
                        else
                        {
                            <div>Error Message</div>
                            Html.ValidationSummary(true, "", new { @class = "text-danger" });
                        }
                     }
0

TempData[] Bedzie ci potrzebny jeśli chcesz robić post redirect to get, jako transporter VM

0

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.

0

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...

1 użytkowników online, w tym zalogowanych: 0, gości: 1