2011-08-04 7 views
0

私は自分のページにAjax.BeginFormを持っています。 検証エラーが返されたら、ボタンを非表示にします。 例:Ajax.BeginFormが返され、検証エラーが発生してボタンが隠れています。

名前を保存したい。重複する名前が存在するコントローラが検証エラーを返す。 エラーが返ってきたら、私はnextStepボタンを隠したいと思っています。

どうすればいいですか?

<script type="text/javascript"> 
function OnSuccess() { 
    alert("Success"); 
    $('#btnNextstep').show(); 
} 
</script> 
@using (Ajax.BeginForm("Save", "PropertyBuilder", new AjaxOptions() 
{ 
    UpdateTargetId = "divSave", 
    OnSuccess = "OnSuccess",  
    InsertionMode = InsertionMode.Replace 
})) 
{ 
    ... 
} 

私ができる一つの方法、それは私が@Modelを取得しますONSUCCESSであるが、これは正しい方法です。例:

function OnSuccess() { 
    if(@Model.Id != 0){ //where id is populated when the data is saved. 
     $('#btnNextstep').show(); 
    } 
} 

答えて

2

コントローラの動作(500内部サーバーエラー)からステータスコードを変更する方法もあります。検証エラーがある場合、Ajax.BeginFormのonErrorコールバックでボタン非表示機能を非表示にすることができます。このアプローチの詳細については、http://zahidadeel.blogspot.com/2011/07/server-side-validation-with-aspnet-mvc.htmlをご覧ください。このようにしないと成功コールバックの応答を処理する必要があります(検証エラーまたは成功)。この場合、あなたは常に

public JsonResult test() 
{ 
    if(ModelState.IsValid) 
    { 
     return json(new{success=true, OtherData = "xyz maybe some html"}); 
    } 
    return Json(new {success=false, OtherData = "some error occured"}); 
} 

のようなコントローラのアクションからJSONを送信することを選ぶことができますし、その後するonSuccessコールバックで、あなたは確認する必要があり

if(data.Success){ 
//do something 
}else{//hide button} 
関連する問題