2012-05-04 12 views
5

tengo una entradaMVC campo Validar remoto 3 tiene un nombre complejo

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

Quiero validarlo con el atributo remoto

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

En controlador de validación tengo una acción:

[HttpPost] 
public JsonResult IsUserNameAvailable(string Email) 

Pero, por supuesto, obtengo un valor nulo en el parámetro Correo electrónico. ¿Qué nombre de parámetro debería pasar al método IsUserNameAvailable?

Actualización: Sólo se veía la solicitud, que se envía a la acción de validación remota: http://myhost/Validation/[email protected] Nombre del parámetro es Buyer.Email, ¿cómo debo pasarlo a funcionar?

Respuesta

0

En lugar de HttpPost, use HttpGet. No estás publicando nada. Estás recuperando el resultado. En segundo lugar, asegúrese de que cuando devuelve el resultado de IsUserNameAvailable que especifica que permite obtener 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

supongo que no coger la idea de emisión. Digo que cuando mi parámetro se llama Correo electrónico, es nulo, porque su nombre debe corresponder con el nombre del campo que valida. Eliminé [HttpPost] y aún obtengo el parámetro Email como null. –

+0

Eche un vistazo a esta pregunta y respuesta de SO: http://stackoverflow.com/questions/5121160/display-the-result-of-remoteattribute-in-mvc-3-0. Estás en el camino correcto. Solo una pregunta, ¿cuál es la idea detrás de @maxlength? ¿Has probado usar el atributo StringLength? –

+0

@maxlength - es solo la adición del atributo html, que limita la longitud de la cadena en la página –

0

Puesto que no se puede nombrar la propiedad de cadena como "Buyer.email", que debería funcionar ... ¿Qué pasa si se espera un "Comprador" vista del modelo en su controlador y dejar que ModelBinder para poblar la propiedad de correo electrónico del comprador?

+0

Esto, por supuesto, ayudará. Pero quería extender el modelo con algunos campos, excepto los campos de la entidad Compradora. En este momento estoy leyendo el valor directamente de querystring y funciona bien para mí –

0

trate de cambiar la firma de su acción para incluir un prefijo aprieto:

public JsonResult IsUserNameAvailable([Bind (Prefix="Buyer.") ] string Email) 
Cuestiones relacionadas