2

私の見解では、検索フィールドがありid = searchPrimaryTradeます。一次取引が見つかって提出されることが要件です。

jquery を使用して、選択した取引の ID を隠しフィールドにコピーします。

@Html.HiddenFor(model => model.PrimaryTradeId)

ユーザーが一次取引を入力しない場合、エラー メッセージが表示されます。

ただし、私がやりたいことは、同じ検証 CSS スタイルを検索テキスト フィールドにトリガーし、その横にマーカー(id = searchPrimaryTrade)を表示することです。*つまり、テキスト ボックスに赤い枠を付けたいのです。

以下のコードでは、companyName が入力されていない場合に発生します。では、これを行うにはどうすればよいですか?

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    ViewContext.FormContext.ValidationSummaryId = "valSumId";
    @Html.ValidationSummary(false, "Please fix these errors.", new Dictionary<string, object> { { "id", "valSumId" } });

    <fieldset>
        <legend>Create Subcontractor</legend>
        <p class="highlight">@ViewBag.Message</p>
        <table class="formTable">
            <tr>
                <td class="leftCell">@Html.LabelFor(model => model.Subcontractor.CompanyName) </td>
                <td class="rightCell">@Html.TextBoxFor(model => model.Subcontractor.CompanyName, new { @style = "width: 300px;" })
                @Html.ValidationMessageFor(model => model.Subcontractor.CompanyName, "*")</td>
            </tr>
            <tr>
                <td class="leftCell">@Html.LabelFor(model => model.PrimaryTrade)</td>
                <td class="rightCell"><input type="search" name="searchPrimaryTrade" id="searchPrimaryTrade" data-scd-autocomplete="@Url.Action("AutocompletePrimaryTrade", "DataService")" style = "width: 300px;" data-val="true" data-val-required="Must enter a Primary Trade" class="primaryTrade required"/>
                    <input type="button" id="ResetPrimaryTrade" value="Reset"/><br/>
                    @Html.HiddenFor(model => model.PrimaryTradeId)
                    @Html.ValidationMessageFor(model => model.PrimaryTradeId, "*")
                    Cannot find the trade? @Html.DialogFormButton("Add New Trade", Url.Action("AddTrade", "Popup"), "Add New Trade", null, Url.Action("Create"), "buttonAddNewTrade")
                </td>
            </tr>
4

1 に答える 1

4

この隠しフィールドは本当に必要ありません。次の属性PrimaryTradeIdを使用して、ビュー モデルのプロパティを単純に装飾できます。[Required]

[Required]
public int? PrimaryTradeId { get; set; }

次に、マークアップで一部の入力フィールドをハードコーディングする代わりに、ヘルパーHtml.TextBoxForとヘルパーを使用します。Html.ValidationMessageFor

<td class="rightCell">
    @Html.TextBoxFor(
        model => model.PrimaryTradeId,
        new {
            type = "search",
            data_scd_autocomplete = Url.Action("AutocompletePrimaryTrade", "DataService"),
            style = "width: 300px;",
            @class = "primaryTrade required"
        }
    )
    <input type="button" id="ResetPrimaryTrade" value="Reset"/><br/>

    @Html.ValidationMessageFor(model => model.PrimaryTradeId, "*")

    Cannot find the trade? 
    @Html.DialogFormButton(
        "Add New Trade", 
        Url.Action("AddTrade", "Popup"), 
        "Add New Trade", 
        null, 
        Url.Action("Create"), 
        "buttonAddNewTrade"
    )
</td>

Html ヘルパーは、適切なマークアップを生成し、モデルのデータ注釈に基づいて正しい検証属性を発行するようになりました。

于 2013-02-06T16:45:26.887 に答える