Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

asp.net(MVC 3), ajax, osnovni/alternativni scenario - Best Practice

[es] :: .NET :: ASP.NET :: asp.net(MVC 3), ajax, osnovni/alternativni scenario - Best Practice

[ Pregleda: 1692 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tdusko

Član broj: 93380
Poruke: 1702
*.customer.m-online.net.



+768 Profil

icon asp.net(MVC 3), ajax, osnovni/alternativni scenario - Best Practice02.03.2012. u 12:15 - pre 147 meseci
Generalno jako cesto imam ovaj problem od kako sam poceo da se bavim ovim. Znaci, hocu da u zavisnosti od rezultata neke akcije koja se odigra na serveru logiciram na klijentu. Prost primer:

Web aplikacija koja se sastoji od jedne strane koja ima header, footer i content. Header i footer su konstantni, a Content se menja uz pomoc javascripta i ajax jquery post-a. Prost primer jednog takvog content dela bi bio

- <div id="divContent"> i u njemu forma sa dva input polja i dugme
- klik na dugme poziva javascript metodu
- javascript metoda radi ajax post na neku akciju
- akcija radi nesto i vraca kao rezultat HTML koji ce se prikazati
- javascript metoda u success delu lepi rezultat na content div

E, gde je tu problem? Problem je u tome sto je ovako implementirana javascript metoda glupa i ne zna koji je html dobila. Ukoliko se desila neka greska, controller ce vratiti view sa view modelom, ali metoda nece znati da se desila greska. Ako bih hteo jos dodatno nesto da uradim ne bih mogao. Mislim, mogu da budzim nesto, ali kapiram da mora da postoji nesto uljudnije. Mogu na primer u taj view da stavim non visible div u koji cu preko ViewBag.statusCode (koji cu da setujem u akciji) da ubacim nesto pa u success delu javascript metode da to procitam, ali mi to nesto ne mirise kako treba.

javascript metoda:

Code:

function postRegistrationForm() {
    $('#divContent').hide('slow');
    $.ajax(
    {
        type: "POST",
        url: "/Account/UserRegistration",
        data: $("#frmUserRegistraiton").serialize(),
        success: function (result) {
            $("#divContent").html(result);
            $('#divContent').show('normal');
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        }
    });
}


Kontroler akcija:

Code:

 public ActionResult UserRegistration(UserRegistrationViewModel model)
{          if(sve Ok)
                 return PartialView("_NekiView");
             else (nesto ne valja)  
                  return PartialView("_UserRegistration", model);
}


Jel postoji nacin da se uz view vrati jos nesto? Kako se Json uklapa ovde kad treba akcija da vrati html? Slab sam sa Jsonon skroz.

Hvala
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
82.117.202.*



+6 Profil

icon Re: asp.net(MVC 3), ajax, osnovni/alternativni scenario - Best Practice02.03.2012. u 12:31 - pre 147 meseci
Da, ovo je idealan kandidat za JSon.
Vratis iz akcije Json koji sadrzi recimo 3 stvari
-success (bool flag)
-successHtml
-errorMessage

i onda sa kontrolera vratis JSon:
Code:
public ActionResult UserRegistration(UserRegistrationViewModel model)
{
string partialContent = String.Empty;
          if(sve Ok)
                 partialContent= RenderPartialViewContent("_NekiView");
             

    return JSon(new {success=isOk, successHtml=partialContent, errorMessage=GetErrorMessageForUserRegistrationFailed();});
}

Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.customer.m-online.net.



+768 Profil

icon Re: asp.net(MVC 3), ajax, osnovni/alternativni scenario - Best Practice02.03.2012. u 13:36 - pre 147 meseci
Hvala Toxter, to je to!

Samo da dodam sta sam jos morao da dodam da bi ovo radilo. Nekome ko ne zna kao i ja ce dobro doci :)

metoda za view-to-string
Code:

 public static string RenderPartialViewContent(string viewName, object model, 
ControllerContext context, ViewDataDictionary viewData, TempDataDictionary tempData)
        {
            viewData.Model = model;

            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
                ViewContext viewContext = new ViewContext(context, viewResult.View, viewData, tempData, sw);
                viewResult.View.Render(viewContext, sw);

                return sw.GetStringBuilder().ToString();
            }
        }


javascript funkcija koja sada dobija Json kao rezultat

Code:

function postRegistrationForm() {
    $('#divContent').hide('slow');
    $.ajax(
    {
        type: "POST",
        url: "/Account/UserRegistration",
        data: $("#frmUserRegistraiton").serialize(),
        success: function (result) {
if(result.success == isOk)
//radi nesto
else
//radi nesto drugo
            $("#divContent").html(result.successHtml);
            $('#divContent').show('normal');
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        }
    });
}
 
Odgovor na temu

[es] :: .NET :: ASP.NET :: asp.net(MVC 3), ajax, osnovni/alternativni scenario - Best Practice

[ Pregleda: 1692 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.