5

誰かが私にヒントを与えることができれば幸いです。

私はしばらく探していましたが、問題を解決できると思っていた投稿を見つけましたが、そうではありませんでした。

特定の状況下で必要な検証属性を無効にする

基本的に、ユーザー名、 FirstNameLastName、およびSignupDateを持つ単純な User.cs モデルがあります。

すべてに必要な注釈があり、必須タグを消去せずにこれを解決したいと思います。

ビューを生成した後、ビューでSignupDateの HTML コードを消去します。

 <div class="editor-label">
        @Html.LabelFor(model => model.SignupDate)
 </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.SignupDate)
        @Html.ValidationMessageFor(model => model.SignupDate)
 </div>

送信をクリックしても機能しません。

また、他の投稿で提案されていることを行う場合

<div class="editor-label">
        @Html.LabelFor(model => model.SignupDate)
</div>
<div class="editor-field">
       @Html.TexBoxFor(model => model.SignupDate, new { data_val = false })
</div>

空白のままにしておくと、機能しません..

助言がありますか?ありがとう!!

4

2 に答える 2

10

ビューでクライアントの検証を無効にし、値を検証したくないエンティティのモデル状態のエラーを削除できます。

私の場合、ユーザーがパスワードを入力した場合にのみパスワードを変更したかったのです。Html.HiddenFor を使用することは、毎回クライアントにパスワードを送信するため、良い方法ではありませんでした。パスワードは送信されるべきではありません。

私がしたことは、ビューでクライアントの検証を無効にすることでした

@model MyProject.Models.ExistingModelWithRequiredFields

@{
    ViewBag.Title = "Edit";
    Html.EnableClientValidation(false);
}

これにより、空の値でもフォームを送信できます。クライアントの検証はすべて無視されますがサーバーの検証は引き続き実行されるため、実行する必要のないものはクリアする必要があることに注意してください。これを行うには、コントローラーのアクションに移動し、必要な各プロパティのエラーを削除します。

public ActionResult Edit(ExistingModelWithRequiredFields updatedModel)
{
    var valueToClean = ModelState["RequiredPropertyName"];
    valueToClean.Errors.Clear(); 
    if(ModelState.IsValid)
    {
        ...
        //Optionally you could run validations again 
        if(TryValidateModel(updatedModel)
        {
            ...
        }
        ...
    }
    ...
}
于 2013-03-06T13:34:41.447 に答える
0

model.SignupDate値を保持すると仮定すると、これで解決するはずだと思います:

<%: Html.HiddenFor(model => model.SignupDate) %>
于 2012-12-16T11:52:12.213 に答える