Quiero implementar la validación del lado del cliente en el formulario, pero ninguno de los mensaje de error se muestra cuando pongo los datos erróneos. A continuación es mi código de modelo:

Modelo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace LayoutProject.Models
{
    public class Book
    {
        public int BookId { get; set; }
        [Required]
        public String Title { get; set; }
        public String Author { get; set; }
    }
}

Mi vista parcial:

@model LayoutProject.Models.Book    

<h4>Books</h4>

@Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <table>
        <tr>
            <td>@Html.LabelFor(d=>d.BookId)</td>
            <td>@Html.TextBoxFor(d=>d.BookId)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(d=>d.Title)</td>
            <td>@Html.TextBoxFor(d=>d.Title)
                @{ Html.ValidateFor(d => d.Title); }
                @Html.ValidationMessageFor(d=>d.Title, "", new { @class = "text-danger" })
            </td>

        </tr>
        <tr>
            <td>@Html.LabelFor(d=>d.Author)</td>
            <td>@Html.TextBoxFor(d=>d.Author)</td>
        </tr>
    </table>

Vista:

    @{
    ViewBag.Title = "CreateBooks";
}

<h2>CreateBooks</h2>

<form action="/Home/SaveBooks" method="post">
    @Html.Partial("_CreateBook")
    <input id="createBook" type="submit" value="Submit"/>
</form>

Mi controlador:

[HttpPost]
public ActionResult SaveBooks(Book book)
{
    if (ModelState.IsValid)
    {

        //write code to update student 

        return RedirectToAction("Index");
    }
    return View(book);
}

He añadido los scripts requeridos en mi diseño: validar y discreta secuencias de comandos. Pero cada vez, que me envíe el formulario, con el Título campo vacío, que es un campo obligatorio, va en el controlador y no aparece el mensaje de error. Alguna idea de lo que podría causar este error?

Tengo que agregar todo esto de los scripts demasiado:

  <script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate-vsdoc.js" type="text/javascript"></script>
<script src="@Url.Content("/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
  • Quitar @{ Html.ValidateFor(d => d.Title); } (no estoy seguro de lo que usted piensa que está haciendo). Siempre y cuando usted no ha deshabilitado la validación del lado del cliente y han incluido jquery{version}.js, jquery.validate.js y jquery.validate.unobtrusive.js (en el orden correcto y sin duplicados) la validación del lado del cliente funcionará bien
  • He quitado ‘@{ Html.ValidateFor(d => d.Titulo); }’ y he añadido las secuencias de comandos en el orden correcto, pero el mensaje de error aún no se mostrará. Estoy usando google chrome, la versión más reciente. El ValidateFor, yo pensaba que iba a comprobar si el campo está vacío o no.
  • Revise su web.config archivo para <add key="ClientValidationEnabled" value="true" /><add key="UnobtrusiveJavaScriptEnabled" value="true" /> en el <appSettings> sección
  • Ya está activado y de que los ajustes están bien. Realmente perdido en cuanto a que el problema podría ser.
  • Está usted seguro de que no ha desactivado el javascript en el navegador?
  • No veo que la configuración de cualquier mensaje de validación. Tal vez este muy rápido. [Requerido(AllowEmptyStrings = false, ErrorMessage = «El mensaje de Error aquí»)]
  • Muecke: Sí javascript está habilitado.
  • Son las secuencias de comandos en la vista principal o diseño (que no debe ser en el parcial)
  • En la presentación. He probado la eliminación de ellos desde el diseño y ponerlos en la vista principal, pero aún no hay mensaje de error.

InformationsquelleAutor user3762810 | 2015-10-02

3 Comentarios

  1. 4

    Está devolviendo el mal Vista en el controlador cuando el modelo no es válido.
    Cambio return View(book); para volver la Vista(«the_actual_view», libro);

  2. 2

    @Html.ValidationMessageFor(d=>d.El título, «», new { @class = «texto» peligro -})

    Aquí puede ajustar la validationmessage a: «».
    Si el cambio es para:

    @Html.ValidationMessageFor(d=>d.Title, null, new { @class = "text-danger" })

    Se debe trabajar.

    EDIT 1:
    Mantener [Requerido] en su modelo.

  3. 0

    No veo establece ningún mensaje de validación, por lo que no hay mensaje a mostrar. Esta podría ser la solución a su problema.

    [Required(ErrorMessage = "Your Error message here")]

    Y en su cshtml punto de vista, no para reemplazar la ErrorMessage conjunto anterior, haga lo siguiente:

    @Html.ValidationMessageFor(d=>d.Title, null, new { @class = "text-danger" })
    • Nope, yo quiero usar el mensaje de error por defecto, no un personalizadas. Pero aún así, he intentado la solución y el mensaje de error todavía no se mostrará.
    • esto está mal, cuando no se proporciona un mensaje de error en el atributo, el valor por defecto se utilizará el mensaje

Dejar respuesta

Please enter your comment!
Please enter your name here