2017-01-19 13 views
0

現在、C#とAsp.Net MVCを使用して開発中のアプリケーションに取り組んでいます。私は2つの部分に分割されたフォームを持っています。クリックすると3つの送信ボタンがありますが、もちろんクライアント側の検証を行い、1つ以上の入力が必要な場合は不平を言います。次のようにフォームの一部のクライアント側の検証

クリック:

  1. 提出 - 検証はフォーム
  2. 保存の前半ではありませんが - の検証 - 検証は一時的にを追加
  3. を必要としませんフォームの下半分

私の見解モデルクラスは

public class ViewModel 
{ 
    public User User { get; set; } //used for first half of the form 
    public Department Department { get; set; } //used for second half of the form 
} 

のようなものを見て、私が動作しているようですし、何の検証が行われません、クラスcancelを持っていた場合、私のPOCOクラスは保存クリックで

public class User 
{ 
    public int Id { get; set; } 

    [Required] 
    public string Username { get; set; } 
    public DateTime Dob { get; set; } 

    //more required properties 
} 

public class Department 
{ 
    public int Id { get; set; } 

    [Required] 
    public string DepartmentName { get; set; } 

    //more required properties 
} 

のように見えます。しかし、私は他の2つのボタンのためにどのようにそれを行うことができるかを把握しているように見えるかもしれません。方法はありますか、私はここで完全にレールから外れています。

+0

手動で処理する必要があります。この種のケースに対する自動検証はありません。 –

+0

@KDあなたが小さな例を提供できれば可能です。 – Code

+0

達成したいことが明確ではありません。第1部のいくつかの条件に基づいて第2部を検証したいだけですか?第2部の前に第1部を保存したいですか –

答えて

1

あなたのコメントでオプション2を使用することに決めたので、ここにその解決策を示します。あなたが一つの機能を追加し、上記のすべてのボタンとそれをバインドする必要があり、3種類のボタン...

<button type="button" id="save" class="submit">Save</button> 
<button type="button" id="submit" class="submit">Submit</button> 
<button type="button" id="tempAdd" class="submit">Temporarily Add</button> 

を持って提供

$(function(){ 
$("submit").click(function(){ 
    var ignoreValidationElements = []; 
    if$(this).attr("id") == "save") 
    { 
    // add element ids which you want to exclude from validation 
    ignoreValidationElements.push("FirstName"); 
    ignoreValidationElements.push("LastName"); 
    } 
    else if$(this).attr("id") == "submit") 
    { 
    ignoreValidationElements.push("FirstName"); 
    } 
    else if$(this).attr("id") == "tempAdd") 
    { 
    ignoreValidationElements.push("LastName"); 
    } 

    // code to remove validation attributes 
    for(i = 0; i < ignoreValidationElements.length;i++) 
    { 
     var element = $("#" + ignoreValidationElements[i]); 
     // remove all validation related attributes from it 
     var attributes = element[0].attributes; 
     for(var j = 0; j <attributes.length; j++) 
     { 
      if(attributes[j].name.indexOf("data-") >=0) 
      { 
       var attributItem = attributes[j]; 
       var attributeName = attributeItem.name; 
       element.removeAttr(attributeName); 

      } 
     } 

//submit the form 
    } 
    }); 

}); 
+0

の例を教えてください。あなたのニーズに応じてこのロジックを強化することができますが、この解決策は私のコメントに記載されたオプション2についての全体的なアイデアを提供します –

+0

これはありがとう、しかし、 'attributes [j] .indexOfは関数ではありません。 'というエラーが表示されます。フォームは外側の 'for'ループの外側に提出されるべきではありません – Code

+0

私はそのエラーを修正しました。ありがとう。ちょうどすぐに、私はフォームがループから提出されるべきではないと言いましたか? – Code

関連する問題