mvc - validation asp net core
ValidaciĆ³n Remota MVC 5 (4)
Necesito validar un valor de campo de entrada del usuario antes de enviar el formulario.
He creado una acción en mi controlador personalizado y decoré el campo con ella:
nombre de la acción: nombre del controlador CheckValue
: Validate
[Remote("CheckValue", "Validate"), ErrorMessage="Value is not valid"]
public string Value { get; set; }
El problema es cuando presiono enviar, se envía el formulario y luego se muestra el mensaje El Value is not valid
es Value is not valid
si el valor ingresado por el usuario no es válido.
¿Cómo puedo validar el valor ingresado por el usuario e impedir que se envíe el formulario si el valor no es válido y mostrar el mensaje de error?
Si intento en JavaScript para verificar si el formulario es válido $("#formId").valid()
que devuelve verdadero, eso significa que no importa cuál sea el estado del valor (válido o no) el formulario es válido.
Por otro lado, si decorar otro campo con el atributo [Required]
el formulario no se envía y se muestra el error para ese campo que se requiere. Sin embargo, la validación no ocurre detrás de la escena para el campo de validación remota.
No pones el código del Controlador. Pero debe ser algo como esto:
Tu codigo:
[Remote("CheckValue", "Validate", ErrorMessage="Value is not valid")]
public string Value { get; set; }
Mi código para el controlador (validar):
public ActionResult CheckValue(string Value)
{
if (Value == "x value")
{
// This show the error message of validation and stop the submit of the form
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
// This will ignore the validation and the submit of the form is gone to take place.
return Json(false, JsonRequestBehavior.AllowGet);
}
}
Sí, tienes que agregar control remoto a tu modelo:
[Remote("ActionName", "ControllerName", ErrorMessage = "{0} Is somthing!")]
public string yourproperty { get; set; }
Y controlador:
public JsonResult ActionName(string yourproperty)
{
return Json(!db.yourproperty.Any(lo => lo.yourproperty== yourproperty), JsonRequestBehavior.AllowGet);
}
Funciona bien para mí, espero que sea útil para ti.
La solución completa de validación remota en MVC. Verificará el correo electrónico de la base de datos y luego comprobará si existe en la base de datos y luego mostrará un error:
el Email ya existe
1. Acción del controlador de cuenta
[AllowAnonymous]
[HttpPost]
public ActionResult CheckExistingEmail(string Email)
{
try
{
return Json(!IsEmailExists(Email));
}
catch (Exception ex)
{
return Json(false);
}
}
private bool IsEmailExists(string email)
=> UserManager.FindByEmail(email) != null;
2. Agregue la validación del modelo
[Required]
[MaxLength(50)]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[System.Web.Mvc.Remote("CheckExistingEmail", "Account", HttpMethod = "POST", ErrorMessage = "Email already exists")]
public string Email { get; set; }
3. Agregue guiones
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
te puede ayudar Gracias
Con la referencia de la demo de c-sharpcorner
Podemos usar RemoteAttribute.
Paso 1
En el HomeController crea un método y para eso escribe lo siguiente.
public JsonResult IsUserExists(string UserName)
{
//check if any of the UserName matches the UserName specified in the Parameter using the ANY extension method.
return Json(!db.Users.Any(x => x.UserName == UserName) ,JsonRequestBehavior.AllowGet);
}
Es posible que se pregunte por qué estamos devolviendo JsonResult. Queremos que la validación se produzca en el lado del cliente, por lo que estamos devolviendo un JsonResult.
Paso 2
El siguiente paso es enganchar este método con la propiedad de nombre de usuario y para eso primero necesitamos agregar un archivo de clase en la carpeta de modelos, agregar una clase de Usuario parcial y proporcionar la personalización requerida a la propiedad UserName.
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace UniqueField.Models
{
[MetadataType(typeof(UserMetaData))]
public partial class User
{
}
class UserMetaData
{
[Remote("IsUserExists","Home",ErrorMessage="User Name already in use")]
public string UserName { get; set; }
}
}
Paso 3
En create.cshtml necesitamos especificar el origen de los tres archivos jQuery en el orden dado.
<h2>Create</h2>
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>