Para comenzar Bueno, probé la información de varios enlaces, incluido este, que me pareció el más útil. Estoy tratando de asegurarme de que un usuario no ingrese un correo electrónico que ya esté en la base de datos. Estoy tratando de usar el atributo Remoto, pero del código que tengo, cada vez que hago clic en el botón Enviar, no sucede nada. Es como si lo que tengo evitara que el código continuara.

Aquí está mi código que comienza con parte del modelo. Employee.cs

    [Required(ErrorMessage ="Email Address is required.")]
    [Remote("checkEmailValidate", "Employee", ErrorMessage ="User with this Email already exists")]
    public virtual string EmailAddress { get; set; }

Y aquí es parte de mi controlador. EmployeeController.cs

    [AllowAnonymous]
    [HttpPost]
    public JsonResult checkEmailValidate(string email)
    {

        if (checkEmail(email))
        {
            return Json("Email Already Exists!", JsonRequestBehavior.AllowGet);
        }
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    public Boolean checkEmail(string email)
    {

        Employee employee = (from e in db.Employees
                          where e.EmailAddress == email
                          select e).FirstOrDefault();
        Console.Write(employee.EmailAddress);
        if (employee == null)
        {
            return true;
        }


        return false;
    }

Y aquí hay un fragmento de la vista. No estoy seguro de si debería poner esos guiones allí. Estaba tratando de buscar, pero no pude encontrar una respuesta clara en esa parte, pero la voy a poner aquí para que pueda hacerse una idea de lo que tengo.

    <div class="form-group">
        @Html.LabelFor(model => model.EmailAddress, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.EmailAddress, new { htmlAttributes = new { @class = "form-control", placeholder = "Email Address" } })
            @Html.ValidationMessageFor(model => model.EmailAddress, "", new { @class = "text-danger" })
        </div>
    </div>
    <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>

Cualquier ayuda sera bienvenida. De nuevo, cuando hago clic en el botón para enviar la información del nuevo usuario, parece que no sucede nada. Lo que quiero que suceda es que aparezca un texto rojo sobre o al lado del cuadro donde ingresaron su correo electrónico diciéndoles que ya existe.

Si hay una manera más fácil o "más barata" de tener una alerta como esa ventana emergente en la misma página para que no borre la otra información que ellos ponen, eso también sería aceptado. ¡Gracias!

0
Andrew McKeighan 14 dic. 2016 a las 18:58

2 respuestas

La mejor respuesta

Entonces parece que mi error fue con los argumentos para el método checkEmailValidate. No estoy seguro de si así es como funciona, pero parece que necesito que el nombre de la variable de argumentos sea el mismo que en el controlador. Así que con

public virtual string EmailAddress { get; set; }

Necesito asegurarme de que checkEmailValidate se vea así checkEmailValidate(string emailAddress) en lugar de checkEmailValidate(string email)

0
Andrew McKeighan 14 dic. 2016 a las 17:00

Pasos más sencillos: con Entity Framework y LINQ

Obtener datos de nombre de usuario ingresados ​​por el usuario al controlador

string strUserName = Request["txtUserName"].ToString();

Comparar strUserName con Entity usando linq

using (Entity _EntityObj = new Entity()) {
    var checkUserName = _EntityObj.Users.Where(x => x.UserName ==strUsername).FirstOrDefault();
}

checkUserName devolverá nulo si UserName no existe

if(checkUserName != null) {
    // UserName available
}
else {
    // User Name exist
}
1
Meloman 9 jul. 2018 a las 06:55