2012-05-04 10 views
5

mam wejścieMVC 3 zdalnego pole validate ma złożoną nazwę

@Html.TextBoxFor(m => m.Buyer.Email, new { @maxlength = "100" }) 

Chcę potwierdzić to z odległego atrybutu

[Remote("IsUserNameAvailable", "Validation")]   
public string Email { get; set; } 

W kontrolerze walidacji Mam działania:

[HttpPost] 
public JsonResult IsUserNameAvailable(string Email) 

Ale oczywiście otrzymuję wartość pustą w parametrze Email. Jaką nazwę parametru należy przekazać do metody IsUserNameAvailable?

Update: Tak wyglądał wniosek, który jest wysyłany do zdalnego działania Walidacja: http://myhost/Validation/[email protected] nazwa parametru jest Buyer.Email, w jaki sposób należy przekazać go do funkcji?

Odpowiedz

0

Zamiast HttpPost użyj HttpGet. Nie publikujesz niczego. Odzyskujesz wynik. Po drugie upewnij się, że gdy zwrócisz wynik z IsUserNameAvailable, który określisz, że zezwalasz na JSON.

[HttpGet] 
public JsonResult IsUserNameAvailable(string Email) 
{ 
    // Do something 
    if (your_email_check_returns_true) 
    { 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 

    return Json(false, JsonRequestBehavior.AllowGet); 
} 
+1

Przypuszczam, że nie złapać ideę wystawienia. Mówię, że gdy mój parametr nazywa się Email - jest on pusty, ponieważ jego nazwa powinna odpowiadać nazwie sprawdzanego pola. W ogóle usunąłem [HttpPost] i nadal otrzymuję parametr Email jako null. –

+0

Spójrz na to pytanie i odpowiedź: http://stackoverflow.com/questions/5121160/display-the-result-of-remoteattribute-in-mvc-3-0. Jesteś na dobrej drodze. Tylko jedno pytanie, jaka jest idea @maxlength? Czy próbowałeś użyć atrybutu StringLength? –

+0

@maxlength - to po prostu dodanie atrybutu html, który ogranicza długość napisu na stronie –

0

Ponieważ nie można nazwać właściwość ciąg jako „Buyer.email”, to powinno działać ... Co jeśli oczekujesz „Kupujący” widok modelu w kontrolerze i niech ModelBinder aby wypełnić właściwość e-mail kupującego?

+0

To oczywiście pomoże. Ale chciałem rozszerzyć model o pewne pola poza polami z encji Kupującego. Teraz czytam wartość bezpośrednio z querystringa i działa mi dobrze –

0

Spróbuj zmienić podpis swojego działania obejmuje prefiks wiąże:

public JsonResult IsUserNameAvailable([Bind (Prefix="Buyer.") ] string Email) 
Powiązane problemy