2016-11-18 16 views
0

ユーザー入力が有効かどうかを確認するMVC Ajaxコールバックがあります。このコールバックは、関連するモデルプロパティの[Remote]属性を介して呼び出されます。Ajaxリモート検証で警告を返します(エラーではありません)

私はデザインを変更しましたが、値が正しくない場合は本当にユーザーに警告したいと思っていましたが、誤った値でモデルの検証ができないようにしたいと思います。

クイック検索では、MVCに焼いた「目立たない検証」マジック(例:this SO post)に似た「邪魔されない警告」を配線するという一般的な問題に対する非常に複雑な解決策を説明するいくつかのスレッドが表示されます。私は一般的な解決策を探しているわけではありません。これに多くの時間と労力を費やしたくはありませんが、Ajaxの専門家がAjaxサーバールーチンから返すことのできるものがあるかどうかは分かりません。妥当性検証のクライアント側コードが妥当性検査エラーを引き起こさずにメッセージを出す効果。

はFYI、私の既存のサーバー側のコードは次のようになります。

public async Task<ActionResult> CouponCodeExists(string couponCode, int? planId) 
    { 
     if (some_logic) { 
      return Json("Coupon code is already taken", JsonRequestBehavior.AllowGet); 
     } else { 
      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
    } 
+1

はちょうどあなたが入力 '.change()'イベントにAJAX呼び出しを所有して行い、成功コールバックで、メッセージを表示します(検証エラーを引き起こさないようにするには、 'RemoteAttribute'を削除してください)。 –

+0

@StephenMueckeより良い回答がない場合は、あなたのコメントを優先回答として受け入れたいと思います。あなたが「回答」としてそれを投稿することがとても親切であれば、私はそれを受け入れ、この質問で終わります。 –

答えて

1

RemoteAttributeは、検証属性であり、それはjQuery.validate.jsに検証エラーを追加し、提出からフォームを防ぐことができますトリガします。警告メッセージだけが必要な場合でも、依頼書を提出することができる場合は、入力.change()のイベントであなた自身のAjax呼び出しを行うことができます。

ビューに@Html.TextBoxFor(m => m.couponCode)があると仮定して、メッセージのプレースホルダを追加します。たとえば、<div id="couponwarning">Coupon code is already taken</div>と入力し、display: none;と入力します。その後

var url = '@Url.Action("CouponCodeExists")'; 
var warning = $('#couponwarning'); 
$('#couponCode').change(function() { 
    var code = $(this).val(); 
    var id = .... // the value of your planId input? 
    $.get(url, { couponCode: code, planId: id }, function(response) { 
     if (response) { 
      warning.show(); 
     } 
    }); 
}); 
$('#couponCode').keyup(function() { 
    warning.hide(); 
}); 

次のスクリプトを追加し、この方法は、単にメッセージを表示するようにtrueを返すことができ、またはnull

if (some_logic) { 
    return Json(true, JsonRequestBehavior.AllowGet); 
} else { 
    return Json(null, JsonRequestBehavior.AllowGet); 
} 
関連する問題