web-dev-qa-db-ja.com

「必須」htmlattributeを含むカスタムエラーメッセージをmvc 5レイザービューテキスト入力エディターに追加する方法

私はAsp.Net MVCに精通しています。

必要なフィールドのいずれかが提供されていない場合にカスタムエラーメッセージを表示する必要があるいくつかの必須フィールドがある部分ビュー(ASP.Net MVC)があります。以下は、私の部分ビューの完全なcshtmlコードです。

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

「このフィールドは必須です」というメッセージが表示されている間に、「材料費が必要です」というカスタムメッセージを表示したい。そこで、クライアント側でこのディフォルトエラーメッセージをオーバーライドしたいと思います。

私はこのような何かを達成したい:

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

どんな提案/解決策も大きな助けになるでしょう

9
Aashish Kumar

HtmlAttribute title propertyを使用して、クライアント側でこのデフォルトの必須メッセージをオーバーライドする方法を見つけました。以下にコードを示します。

<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>
9
Aashish Kumar

モデルクラスで、[Required]属性の変更を追加します

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

別のアプローチは、JQueryを使用してJavaScriptから設定するか、設定する属性をオーバーライドすることです。デフォルトでは、ValidationMessageForの出力は

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

したがって、マークアップでこの値をオーバーライドできます

29
Haitham Shaddad

あなたのモデルで

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

サイトに複数のカルチャがある場合は、リソースからロードしてリソース文字列を渡すことを選択できます。

またはあなたの行動で

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