2011-04-14 11 views
3

私はビューエンジンとしてrazorを使用してMVC 3を使用しています。控えめなクライアント検証が有効です。MVC 3で検証をトグルします。Razor

私は、電話または電子メールのいずれかの優先連絡方法を選択するラジオボタングループがあるフォームを作成しようとしています。選択したオプションに応じて、適切なテキストボックスを表示したいが、適切なテキストボックスに必要なバリデータを有効/無効にする。

私のマークアップは、現時点では次のようになります(ただ、それほど明白な誤りを指摘してくださいMVCで出始め):

<div id="prefferedContact"> 
    <p>Preferred Contact Method *</p> 
     <input type="radio" id="contactMethodEmail" name="PreferredContactMethod" value="email" @if (Model.PreferredContactMethod != "phone"){<text>checked="checked"</text>} /> <label for="contactMethodEmail">by email</label> 
     <input type="radio" id="contactMethodPhone" name="PreferredContactMethod" value="phone" @if (Model.PreferredContactMethod == "phone"){<text>checked="checked"</text>} /> <label for="contactMethodPhone">by phone</label> 
    </div> 
    <div id="contactMethodDetails" class="formItem"> 
     <div id="emailAddressBox"> 
      @Html.LabelFor(x => x.Email, "Email address") 
      @Html.TextBoxFor(x => x.Email, new { @class = "textbox" }) 
     </div> 
     <div id="phoneNumberBox"> 
      @Html.LabelFor(x => x.PhoneNumber, "Phone number") 
      @Html.TextBoxFor(x => x.PhoneNumber, new { @class = "textbox" }) 
      </div> 
     </div> 
    </div> 
</div> 

切り替えるには、ラジオボタンにonclickイベントを追加し、いくつかのjqueryの機能があります選択した値に応じて2つのボックスの間に

これらの特定のフィールドのモデルは、現時点では必要な検証は行われていませんが、拘束力があります。

(a)の上と
オフ検証を切り替えることも可能である(b)はありません。この影響にModelState:私は本当にただのアイデアを得るために必要と予想

としても、検証は他の分野に取り組んでいますとにかく妥当性検査(または私はそれをカスタマイズする必要があります)

私は連絡先データのための1つのテキストボックスを持っていると思っていましたが、私は電子メールと電話番号の正規表現検証を別々にしたかったのです。もし私が単一のテキストボックスを持っていたら、選択されたオプションに応じて、テキストボックスの入力規則を切り替えることができますか?

十分な情報があれば十分だと思いますが。

おかげ

ジョエル

答えて

1

あなたは、複数のプロパティに基づいてルールを適用する必要がある場合は、クラス・レベルの検証を行うことができます。

残念ながら

http://weblogs.asp.net/scottgu/archive/2010/12/10/class-level-model-validation-with-ef-code-first-and-asp-net-mvc-3.aspx

Class-level validation

を、これはと思われますサーバーサイドでしか動作しないため、カスタムのクライアントサイドバリデーションを実装する必要がありますイオン。

別のオプションは、それぞれのシナリオ(基本クラスの共通プロパティを持つ)ごとに1つずつ異なる2つのモデルを持つことですが、これは少し複雑かもしれません。

関連する問題