Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 1
  • 30

Dzień dobry.

W nowym projekcie, który całe szczęście zbliża się już do końca próbujemy zastosować atrybut walidacyjny [Remote]. Ze względu na pewną śmieszną architekturę aplikacji większość routów jest rozpisana osobno w RoureConfig.

Tak więc:

[kontroller]  SpecificationController

[HttpGet]
public JsonResult EmailExists(string email)
{
  // jakas validacja maila, trim itd itp


  return Json(true, JsonRequestBehavior.AllowGet); // true tu dane tylko dla przykładu
}

 

[RouteConfig]

routes.MapRoute(name: "EmailExists", url: "Specification/EmailExists", defaults: new {controller = "Specification", action = "EmailExists" });


A w ViewModelu mamy coś takiego:

[Required]
[EmailAddress]
[DataType(DataType.EmailAddress)]
[Remote("EmailExists", "Specification", ErrorMessage = "Email exists!")]
 public string Email { get; set; }

Wszystko dobrze fajnie... debugger pokazuje, że akcja kontrolera jest osiągana, ale string e-mail jest pusty (null) - nie binduje się

Próbowaliśmy już desperacko różnych konfiguracji routeconfiga (niektóre bez sensu ale tonący... itd):

routes.MapRoute(name: "EmailExists", url: "Specification/EmailExists", defaults: new {controller = "Specification", action = "EmailExists",  email = UrlParameter.Optional });

routes.MapRoute(name: "EmailExists", url: "Specification/EmailExists/{email}", defaults: new {controller = "Specification", action = "EmailExists",  email = UrlParameter.Optional });

Czy ktoś ma jakiś pomysł o co chodzi?

adamslosarczyk
  • Zapytał
  • @ adamslosarczyk | 11.08.2016
    • 3
    • 0
    • 2

Odpowiedź (1)

  • 0

Pytanie, czy masz problem tylko z tym konkretnym atrybutem, czy z innymi również? Bo generalnie to powinno działać. Ciężko powiedzieć patrząc tylko na fragmenty kodu wyrwane z kontekstu gdzie może być problem. Jeśli dalej nie rozwiązałeś tego problemu to proszę o podesłanie większej ilości szczegółów, najlepiej w postaci fragmentu projektu w którym to nie działa. To co przychodzi mi w pierwszej kolejności do głowy, to napisać własny model binder dziedziczący po tym domyślnym i wstawić w niego breakpoint, tak żeby można było zobaczyć, czy potrzebne parametry w ogóle przychodzą z przeglądarki, może być tak, że ten e-mail przychodzi, ale pod jakimś innym kluczem niż tego oczekuje binder.

  • Odpowiedział
  • @ | 19.09.2016
  • TRENER ALTKOM AKADEMII