2017-01-05 1 views
3

Ich bin naiv zu Asp.Net MVC.So fügen Sie benutzerdefinierte Fehlermeldung mit "erforderlich" htmlattribute zu mvc 5 Rasierer Ansicht Texteingabe-Editor

Ich habe eine Teilansicht (ASP.Net MVC), in der ich einige erforderliche Felder habe Ich möchte benutzerdefinierte Fehlermeldung zeigen, wenn eines der erforderlichen Feld nicht zur Verfügung gestellt wird. Unten ist der komplette cshtml Code für meine Teilansicht.

@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> 
} 

Ich möchte benutzerdefinierte Nachricht "Materialkosten erforderlich" angezeigt werden, während ich bekomme "Dieses Feld ist erforderlich". Also möchte ich diese Difault-Fehlermeldung auf der Client-Seite überschreiben.

möchte ich so etwas wie dies zu erreichen:

<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> 

Jede Anregung/Lösung wäre eine große Hilfe

+0

haben Sie versucht, die Datenanmerkung auf dem MaterialCost in Ihrem Modell zu verwenden? Fügen Sie das Required-Attribut aus Datenanmerkungen hinzu und übergeben Sie die Nachricht im Parameter der Fehlermeldung –

+0

@NoorSamara Ja, zuerst versuchte ich Daten Annotation auf meinem Modell für erforderliche Attribut und auch für Nachricht, aber für Teilansicht Modell Annotation funktioniert nicht. Also versuche ich htmAttribute "required" und es funktioniert gut, aber es zeigt die Fehlermeldung "Dieses Feld ist erforderlich". –

+0

Ich habe selbst einen Test gemacht, und die benutzerdefinierte Nachricht Required funktioniert einwandfrei mit dieser Eigenschaft: 'public decimal MaterialCost {..} {..}', sowohl wenn sie aus einer View * und * aus einer Teilansicht ausgelöst wird. Dies war mit MVC v5.2.3. Benutzt du das auch, oder vielleicht eine ältere Version? –

Antwort

2

ich einen Weg finden, aus diesem Standard erforderlich Meldung auf Client-Seite zu überschreiben, indem htmlAttribute Titel Eigenschaft verwenden und unten ist der Code:

<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> 
0

in Ihrem Modell

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

und Sie können es von Ressourcen zu laden sein wählen und übergeben Sie die Ressourcenzeichenfolge, wenn Sie mehrere Kulturen in Ihrer Site haben.

oder in Ihrem Aktions

public ActionResult(YourModel model) 
{ 
    if (model.doubleMaterialCost == 0) 
      ModelState.AddModelError("doubleMaterialCost ", "Material cost is required"); 
+0

Ich habe diese Annotation bereits in meinem Modell verwendet, aber im Falle einer Teilansicht funktioniert das nicht. –

+0

@AashishKumar Können Sie Ihre Controller-Aktion teilen. –

+0

@AashishKumar Auch ich bearbeite meine Antwort mit einer anderen Art der Validierung, Sie können auch auf diese Weise versuchen. –

10

In Ihrem Modell Klasse, fügen Sie die [Erforderlich] zu Attribute ändern

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

Einen weiteren Ansatz ist es aus mit Hilfe von JavaScript JQuery zu setzen oder das Attribute außer Kraft gesetzt setzt es. Standardmäßig ist der Ausgang der ValidationMessageFor

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

SO, können Sie diesen Wert in Ihrem Markup außer Kraft setzen

+0

Könnten Sie mir bitte sagen, wie wir die Standardausgabe von ValidationMessageFor auf "Materialkosten erforderlich" überschreiben können? Danke im Voraus. –

+0

Sie können das in Ihrer Modellklasse, die in der Ansicht verwendet wird, überschreiben, setzen Sie einfach die Zeile, die ich in meine Antwort eingefügt habe. –

+0

Dies ist eine Teilansicht, also möchte ich nur Client-Validierung nicht "ModelState.IsValid" in meinem Controller. –

Verwandte Themen