2017-06-07 15 views
1

私は新しいオブジェクトを作成するフォームを入力する必要があるASP.NETアプリケーションを持っています。以下のように定義される:createフォームに記入する際他の入力が満たされていない場合にのみ入力を入力する必要があります

public class Address 
    { 
     public int ID { get; set; } 
     [Required] 
     public string AddressLine1 { get; set; } 
     public string AddressLine2 { get; set; } 
     public string AddressLine3 { get; set; } 
     [Required] 
     public string City { get; set; } 
     public string Postcode { get; set; } 

     public string AirportCode { get; set; } 
    } 

フィールドAddressLine1Cityが必要とされます。しかし、新しい開発では、フィールドを導入しましたAirportCode、これは要件を変更します。基本的に、空港のコード値が与えられた場合、他の値は必要ありません。そうでない場合は、アドレス行1と都道府県の値はであり、それでもなおが必要です。ユーザーがフォームのいずれかを記入しなかった場合は、CityAddressLine1の値またはAirportCodeの値が与えられるまでエラーメッセージが表示されると思いますが、物事は、無効なオブジェクトを通過させないことです。

私は、ロジックは次のようになり推測:ここ

if AirportCode OR (AddressLine1 AND City) 

City入力フィールドの小さなサンプルです。アプリケーションによって生成されるデフォルトです:

<div class="form-group"> 
<label asp-for="City" class="col-md-2 control-label">City</label> 
    <div class="col-md-10"> 
     <input asp-for="City" class="form-control" /> 
     <span asp-validation-for="City" class="text-danger"></span> 
    </div> 
</div> 

JavaScriptを使用せずにこれを実装する方法はありますか?フォームの検証はこれまでのところとてもきちんとしていて簡単でしたし、フレームワークを通してこれを行うことができればと思っています。ありがとう。

補足:AirportCodeの入力が開始されると、後で他のフィールドをグレー表示したいことがあります。それは厳密にバリデーションに関連しているわけではありませんが、これに結びつくかもしれませんか?

答えて

1

独自のカスタム検証属性を記述する必要があります。

Howerver非常に使いやすい「ExpressAnnotations」というプラグインがあり、「DataAnnotations」にロジックを実装するのに役立ちます。あなたはそれがあなたの目的のために有用であろうと感じた場合は

[RequiredIf("AirportCode == null", 
    ErrorMessage = "Your error message.")] 
public string AddressLine1 { get; set; } 

[RequiredIf("AirportCode == null", 
    ErrorMessage = "Your error message.")] 
public string City { get; set; } 

[RequiredIf("City == null")] 
[RequiredIf("AddressLine1 == null")] 
public string AirportCode { get; set; } 

、ExpressiveAnnotationsライブラリの詳細については、hereを見つけることができます。クライアント側の検証も、そのままでサポートされています。

アノテーションベースの 条件付き検証メカニズムを提供する小さな.NETおよびJavaScriptライブラリです。与えられた属性は、多くの場合、検証 の条件のステップバイステップ検証の命令的方法について忘れることができます。 フィールド検証要件は がメタデータとして適用されるため、ドメイン関連のコードはより凝縮されます。

+0

私はExpressiveAnnotationsはasp.netコアをサポートしていないと思うまだhttps://github.com/jwaliszko/ExpressiveAnnotations/issues/90 –

+0

彼は彼が、コアを使用していることを言っていませんか? – Anokrize

+0

彼の質問はasp.net-coreとタグ付けされており、彼が表示しているコードは明らかにasp.net coreであり、ビューのtaghelpersを使用しています –

関連する問題