[ wex-alpha @ 15.01.2012. 17:52 ] @
Ne radi mi klijent validacija.


MODEL:

Code:
public class GuestResponse
    {
        [Required(ErrorMessage = "You must enter a name")]
        public string Name { get; set; }

        [Required(ErrorMessage = "Please enter your email address")]
        [RegularExpression(".+\\@.+\\..+",
        ErrorMessage = "Please enter a valid email address")]
        public string Email { get; set; }

        [Required(ErrorMessage = "Please enter your phone number")]
        [RegularExpression("^[0-9]+$", ErrorMessage = "Only numbers are allowed")]
        public string Phone { get; set; }
       
        [Required(ErrorMessage = "Please specify whether you'll attend")]
        public bool? WillAttend { get; set; }
    }




VIEW:

Code:
<html xmlns="http://www.w3.org/1999/xhtml" >
    
<head runat="server">
    <title>RsvpForm</title>    

<script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>  
<script src="../../Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>     
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
    
</head>
<body>
<h1>RSVP</h1>
    
<%Html.EnableClientValidation(); %>

<% using(Html.BeginForm()) { %>
...


Gdje grijesim? Validacija jednostavno ne radi...
[ Dejan Carić @ 15.01.2012. 22:47 ] @
Možda nisi dobro učitao javascript fajlove?
Za client side validaciju u MVC2 su ti potrebni samo MicrosoftAjax.js i MicrosoftMvcValidation.js i naravno <% Html.EnableClientValidation(); %>.

Probaj da javascript fajlove učitaš ovako:
Code:
<script src="<%: Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script>
[ wex-alpha @ 15.01.2012. 22:55 ] @
Citat:
Dejan Carić: Možda nisi dobro učitao javascript fajlove?
Za client side validaciju u MVC2 su ti potrebni samo MicrosoftAjax.js i MicrosoftMvcValidation.js i naravno <% Html.EnableClientValidation(); %>.

Probaj da javascript fajlove učitaš ovako:
Code:
<script src="<%: Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>
<script src="<%: Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script>


Nece... ubacio sam bas tako kao sto si naveo... ista stvar.
[ Dejan Carić @ 15.01.2012. 23:16 ] @
Okači ceo kod iz kontrolera (POST i GET metode) kao i View, pa da vidimo šta ne valja...
[ wex-alpha @ 15.01.2012. 23:25 ] @

Kontroler:
Code:

 [HttpGet]
        public ViewResult RsvpForm()
        {
            return View();
        }
        [HttpPost]
        public ViewResult RsvpForm(GuestResponse guestResponse)
        {
            if (ModelState.IsValid)
            {
                // To do: E-mail guestResponse to the party organizer
                return View("Thanks", guestResponse);
            }
            else // Validation error, so redisplay data entry form
                return View();
        }


View:

Code:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<PartyInvites.Models.GuestResponse>" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    
<head runat="server">
    <title>RsvpForm</title>    

<script src="<%: Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>
 <script src="<%: Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script>
    
</head>
<body>
<h1>RSVP</h1>
    
<%Html.EnableClientValidation(); %>

<% using(Html.BeginForm()) { %>
<%: Html.ValidationSummary() %>
<p>Your name: <%: Html.TextBoxFor(x => x.Name) %></p>
<p>Your email: <%: Html.TextBoxFor(x => x.Email) %></p>
<p>Your phone: <%: Html.TextBoxFor(x => x.Phone) %></p>
<p>
Will you attend?
<%: Html.DropDownListFor(x => x.WillAttend, new[] {
new SelectListItem { Text = "Yes, I'll be there",
Value = bool.TrueString },
new SelectListItem { Text = "No, I can't come",
Value = bool.FalseString }
}, "Choose an option") %>
</p>
<input type="submit" value="Submit RSVP" />
<% } %>

<%: Html.ActionLink("Return to main menu", "Index") %>
</body>
</html>



[ Dejan Carić @ 16.01.2012. 12:58 ] @
Kontroler ti nije dobar.
Ako je ModelState.IsValud == true, da li želiš da vratiš drugi View i proslediš mu model ili da uradiš return RedirectToAction("Thanks") i ispišeš neku generičku poruku?
U else bloku moraš da proslediš model kako bi na View-u mogao da ispišeš greške. Btw. da li ti puca aplikacija sa greškom da je model null kada uradiš postback?

POST akcija bi trebala ovako da izgleda:
Code:
[HttpPost]
public ViewResult RsvpForm(GuestResponse guestResponse)
{
    if (ModelState.IsValid)
    {
        // To do: E-mail guestResponse to the party organizer
        return View("Thanks", guestResponse);
    }
    else // Validation error, so redisplay data entry form
    {
        return View(guestResponse);
    }
}
[ wex-alpha @ 16.01.2012. 15:25 ] @
Citat:
Dejan Carić: Kontroler ti nije dobar.
Ako je ModelState.IsValud == true, da li želiš da vratiš drugi View i proslediš mu model ili da uradiš return RedirectToAction("Thanks") i ispišeš neku generičku poruku?
U else bloku moraš da proslediš model kako bi na View-u mogao da ispišeš greške. Btw. da li ti puca aplikacija sa greškom da je model null kada uradiš postback?

POST akcija bi trebala ovako da izgleda:
Code:
[HttpPost]
public ViewResult RsvpForm(GuestResponse guestResponse)
{
    if (ModelState.IsValid)
    {
        // To do: E-mail guestResponse to the party organizer
        return View("Thanks", guestResponse);
    }
    else // Validation error, so redisplay data entry form
    {
        return View(guestResponse);
    }
}


Nema greske, osim sto mi validacija nikako ne radi. Probao sam razne kombinacije js fajlova, i opet nista... gdje grijesim?

[ Dejan Carić @ 16.01.2012. 15:34 ] @
U kontroleru.
Obrati pažnju na else block i return View(guestResponse); Kod tebe ima samo return View();
[ wex-alpha @ 16.01.2012. 15:41 ] @
Tako sam i stavio, ali isto se ponasa.

Ista stvar... validacije nema.


[ wex-alpha @ 16.01.2012. 15:48 ] @
Stavio sam u webconfig:

Code:

<appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>


I sada polovicno radi :(

Nema validacije dok mijenjam polja. Jedino sto se drugacije desi je na submit dugme... ne dozvoli mi post dok ne popravim greske.

[ wex-alpha @ 16.01.2012. 15:51 ] @
I sada ponovo ne radi... OMFG.

Da li neko ima primjer MVC3, kako uraditi obje validacije?

[ Dejan Carić @ 16.01.2012. 15:55 ] @
Moja greška... Sad sam napravio test aplikaciju i radi sve ok kada se View-u ništa ne prosledi.
Ako su skripte učitane kako treba, onda ne znam šta je prob.

A primere možeš naći na ovom linku:
http://weblogs.asp.net/scottgu...et-mvc-2-model-validation.aspx
[ wex-alpha @ 16.01.2012. 16:10 ] @
Pregledao sam link i po njemu sam i inicijalno i radio.

Nema veze... skontat cu, prije ili kasnije :)

Hvala na trudu i savjetima :)

[ Dejan Carić @ 16.01.2012. 16:11 ] @
Jedino da okačiš projekat ovde ili na PP pa da izdebagujem..
[ Dejan Carić @ 17.01.2012. 11:15 ] @
Za svako polje moraš da imaš i ValidationMessageFor.
Code:
<%: Html.ValidationMessageFor(x => x.Name) %>
<%: Html.ValidationMessageFor(x => x.Email) %>
<%: Html.ValidationMessageFor(x => x.Phone) %>
...


Ukoliko za neko polje nemaš ValidationMessageFor uradiće se postback.

Zameni <%: Html.ValidationSummary(true, "Please fix these errors.")%> sa <%: Html.ValidationSummary(false, "Please fix these errors.")%> da bi video koja polja nisu validna.
[ wex-alpha @ 17.01.2012. 19:10 ] @
Hvala :)