Soy ingenuo Asp.Net MVC.

Tengo una vista parcial(ASP.Net MVC) en la cual tengo algunos campos requeridos quiero mostrar mensaje de error si alguno de los campos obligatorios no siempre. A continuación, es la completa cshtml código de mi vista parcial.

@model CMSAdminPanel.ViewModel.ProductView
<h4>Material And Labour Cost For Each Size</h4>
<hr />
@Html.ValidationSummary(false, "", new { @class = "text-danger" })
@for (int i = 0; i < Model.ServiceView.ListPriceView.Count; i++)
{
@Html.HiddenFor(x => x.ServiceView.ListPriceView[i].ProductSizeType)
<div class="form-group">
@Html.LabelFor(x => x.ServiceView.ListPriceView[i].ProductSizeTypeName, "Size - " + Model.ServiceView.ListPriceView[i].ProductSizeTypeName, htmlAttributes: new { @class = "control-label col-md-4" })
</div>
<div class="form-group">
@Html.LabelFor(x => x.ServiceView.ListPriceView[i].LabourCost, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(x => x.ServiceView.ListPriceView[i].LabourCost, new { htmlAttributes = new { @class = "form-control", required = "required"} })
@Html.ValidationMessageFor(x => x.ServiceView.ListPriceView[i].LabourCost,"", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(x => x.ServiceView.ListPriceView[i].MaterialCost, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(x => x.ServiceView.ListPriceView[i].MaterialCost, new { htmlAttributes = new { @class = "form-control", required = "required" } })
@Html.ValidationMessageFor(x => x.ServiceView.ListPriceView[i].MaterialCost, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(x => x.ServiceView.ListPriceView[i].Profit, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(x => x.ServiceView.ListPriceView[i].Profit, new { htmlAttributes = new { @class = "form-control", required = "required" } })
@Html.ValidationMessageFor(x => x.ServiceView.ListPriceView[i].Profit, "", new { @class = "text-danger"})
</div>
</div>
}

Quiero mostrar mensaje personalizado «costo de Material es necesario», mientras que yo estoy haciendo «Este campo es obligatorio». Así que quiero reemplazar este difault mensaje de error en el lado del cliente.

Quiero lograr algo como esto:

<div class="form-group">
@Html.LabelFor(x => x.ServiceView.ListPriceView[i].LabourCost, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(x => x.ServiceView.ListPriceView[i].LabourCost, new { htmlAttributes = new { @class = "form-control", required = "required", **data_val_required = "LabourCost is requried"**} })
@Html.ValidationMessageFor(x => x.ServiceView.ListPriceView[i].LabourCost,"", new { @class = "text-danger" })
</div>
</div>

Cualquier sugerencia o solución sería de gran ayuda

  • intenta utilizar los datos de la anotación en el MaterialCost en su modelo? agregar el atributo obligatorio de anotaciones de datos y pasar el mensaje en el mensaje de error de parámetro
  • Sí, en primer lugar yo estaba tratando de datos de anotación en mi modelo de atributo requerido y así como para el mensaje, pero también para la vista parcial del modelo de anotación no está funcionando. Así que trato de htmAttribute «necesario» y es funcionando bien, sin embargo, mostrar mensaje de error «este campo es obligatorio».
  • Hice una prueba a mí mismo, y la costumbre de mensaje Requerido funciona bien, el uso de esta propiedad: public decimal MaterialCost {..}{..}, tanto cuando se activa desde un punto de Vista y de una Visión Parcial. Esto fue con MVC v5.2.3. Usas esa demasiado, o tal vez una versión anterior?
  • Sí su trabajo bien para ambos casos, pero quiero hacer la validación del lado del cliente no utilizar la «ModelState.IsValid» y los atributos necesarios en el modelo.

3 Comentarios

  1. 29

    En su modelo de clase, agregue cambiar el atributo [Requerido] a

    [Required(ErrorMessage = "Material cost is required")]
    public decimal MaterialCost {get;set;}

    Otro enfoque es establecer desde JavaScript usando JQuery o reemplazar el atributo que establece. por defecto, la salida de la ValidationMessageFor es

    data-val-required="The field is required.".

    ASÍ, puede reemplazar este valor en el marcado

    • podría usted por favor decirme cómo podemos anular la configuración predeterminada de salida de ValidationMessageFor a «costo de Material es necesaria». Gracias de antemano.
    • Usted puede ignorar que en el modelo de la clase que se utiliza en la vista, sólo hay que poner la línea de lo que he puesto en mi respuesta.
    • Esta es una vista parcial tan sólo quiero hacer la validación del lado del cliente no «ModelState.IsValid» en mi Controlador.
    • El Html Helper crea una validación del lado del cliente como del servidor de lado uno
    • ¿Hay alguna otra manera si no quiero para uso requerido atributo en mi modelo?
    • A continuación, utilice la otra manera en que lo expliqué en mi respuesta por poner the data-val-required="The field is required.".
    • He probado este @Html.EditorFor(x => x.ServiceView.ListPriceView[i].LabourCost, nuevo { htmlAttributes = new { @class = «form-control»,data_valmsg_replace=true,data_val_required = «Coste Laboral Campo requerido», required = «required» } }), pero todavía estoy recibiendo «Este campo es obligatorio». 🙁

  2. 9

    Puedo encontrar una manera de reemplazar el valor predeterminado del mensaje requerido en el Lado del Cliente mediante el uso de htmlAttribute título propiedad y a continuación está el código :

    <div class="form-group">
    @Html.LabelFor(x => x.ServiceView.ListPriceView[i].LabourCost, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
    @Html.EditorFor(x => x.ServiceView.ListPriceView[i].LabourCost, new { htmlAttributes = new { @class = "form-control", required = "required", title = "LabourCost is requried"} })
    @Html.ValidationMessageFor(x => x.ServiceView.ListPriceView[i].LabourCost,"", new { @class = "text-danger" })
    </div>
    </div>
    • de alguna manera esto sólo funciona en textinputs para mí, si tengo un EditorFor type="date" o type="number" se le da el mensaje de error por defecto
  3. 1

    en su modelo de

    [Required(ErrorMessage = "Material cost is required")]
    public doubleMaterialCost { get; set; }

    y usted puede elegir la carga de Recursos y pase de recursos de cadena si usted tiene múltiples culturas en su sitio.

    o en su Acción

    public ActionResult(YourModel model)
    {
    if (model.doubleMaterialCost == 0)
    ModelState.AddModelError("doubleMaterialCost ", "Material cost is required");
    • He utilizado esta anotación en mi modelo, ya, pero en el caso de la vista parcial de esta no está funcionando.
    • Puede compartir su controlador de acción.
    • También puedo editar mi respuesta con otra forma de validación, también se puede tratar de esta manera.
    • En realidad quiero hacer algo en el lado del cliente, no en el controlador de nivel. Es posible?

Dejar respuesta

Please enter your comment!
Please enter your name here