webentwicklung-frage-antwort-db.com.de

Hinzufügen einer benutzerdefinierten Fehlermeldung mit dem erforderlichen HTML-Attribut zum mvc 5-Editor für die Texteingabe von Rasierzügen

Ich bin naiv zu Asp.Net MVC.

Ich habe eine teilweise Ansicht (ASP.Net MVC), in der ich einige erforderliche Felder habe. Ich möchte eine benutzerdefinierte Fehlermeldung anzeigen, wenn eines der erforderlichen Felder nicht angegeben ist. Unten ist der vollständige 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 eine benutzerdefinierte Nachricht "Materialkosten ist erforderlich" anzeigen, während "Dieses Feld ist erforderlich" angezeigt wird. Daher möchte ich diese difault-Fehlermeldung auf der Clientseite überschreiben.

Ich möchte so etwas 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>

Jeder Vorschlag/Lösung wäre eine große Hilfe

5
Aashish Kumar

Ich finde eine Möglichkeit, diese standardmäßig erforderliche Nachricht auf der Clientseite mithilfe von htmlAttribute title property außer Kraft zu setzen. 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>
7
Aashish Kumar

Fügen Sie in Ihrer Modellklasse das Attribut [Required] in hinzu 

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

Ein anderer Ansatz besteht darin, es von JavaScript aus mit JQuery festzulegen oder das Attribut, das es festlegt, zu überschreiben. Die Ausgabe der ValidationMessageFor ist standardmäßig 

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

SO können Sie diesen Wert in Ihrem Markup überschreiben

20
Haitham Shaddad

in deinem Modell 

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

sie können es auch aus Ressourcen laden und die Ressourcenzeichenfolge übergeben, wenn Sie mehrere Kulturen in Ihrer Site haben.

oder in deiner Aktion 

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