2016-03-20 11 views
-3

では動作しません。エンティティのTownがあり、そのTownNameプロパティが一意であることを実装したいと思います。私が持っているコントローラでASP.NET MVCリモート属性は、私はブートストラップモーダルを使用したCRUDとコントローラを持っているブートストラップモーダル

public class Town 
{ 
    ... 
    [Required] 
    [Remote("IsTownValid", "Town"]   
    public string TownName { get; set; } 
    ... 
} 

:だから私は、リモート属性を使用

public JsonResult IsTownValid(string townName) 
{ 
    return IsTownExist(townName) ? Json(false, JsonRequestBehavior.AllowGet) : Json(true, JsonRequestBehavior.AllowGet); 
} 

private bool IsTownExist(string townName) 
{ 
    // repository-unitOfWork that get town with specified town name 
    var town = repository.TownRepository.Get(filter: t => t.TownName == townName).SingleOrDefault(); 

    if (String.IsNullOrEmpty(townName)) 
     return true; 
    else if (town != null) 
     return true; 
    else 
     return false; 
} 

を私は_layoutビューでMicrosoftのjQuery控えめな検証ライブラリレジスタを持っています。私はモーダルリモート属性を無視し、町を作るためにモーダル起動したときに

問題があります。したがって、テスト目的のために、コントローラの標準作成ページとリモート検証作業を完璧に作成します。だから、私の質問はなぜモーダルで働いていないのですか?

提案、してください...事前のおかげで...

+1

おそらくモーダルが動的にロードされているとあなたがバリデータを再解析していない理由は?サイドノート:そのちょうど 'JSON(!IsTownExist(townName)、JsonRequestBehavior.AllowGet)することができ;' –

+0

ます。また 'IsTownExist()'メソッド内のロジックで再び見たいと思うかもしれません。 'if(String.IsNullOrEmpty(townName)){trueを返します。 } 'はデータベース呼び出しの前にあるべきです。 –

答えて

0

ステファン・ミュエッケ、答えてくれてありがとう、彼らは答えるために私をリードしているため。これはモーダルを有効にするJavaScriptコードです。私は、クライアント側の検証がモーダルで起動するコードに追加する行をコメント

$(function() { 
    $.ajaxSetup({ cache: false }); 

    $("a[data-modal]").on("click", function (e) { 

     $('#m-town-modal-content').load(this.href, function() { 
      // this is the first add 
      $.validator.unobtrusive.parse($('form')); 

      $('#m-town-modal').modal({ 
       keyboard: true 
      }, 'show'); 

      bindForm(this); 
     });  

     return false; 
    }); 
}); 

function bindForm(dialog) { 
    $('form', dialog).submit(function() { 
     // this is the second addition 
     if(this.valid()) { 
      $.ajax({ 
       url: this.action, 
       type: this.method, 
       data: $(this).serialize(), 
       success: function (result) {    
        if (result.success) { 
         $('#m-town-modal').modal('hide');      
         location.reload(); 
        } else { 
         $('#m-town-modal-content').html(result); 
         bindForm(); 
        } 
       } 
      }); 
      return false; 
     }    
    }); 
}  
関連する問題