私はMVC3アーキテクチャ、c#.netを使用しています。次のフィールド、つまりパスワードフィールドにフォーカスが変わったら、すぐにテキストボックスの内容(ユーザーID)をデータベースと比較する必要があります。そこで、ユーザーIDフィールドにonblurイベントを使用して、Controllerメソッドを呼び出すことを考えました。この問題への取り組み方を教えてもらえますか?初心者のImとして、コードスニペットは高く評価されています。
前もって感謝します、
プラシャーント
私はMVC3アーキテクチャ、c#.netを使用しています。次のフィールド、つまりパスワードフィールドにフォーカスが変わったら、すぐにテキストボックスの内容(ユーザーID)をデータベースと比較する必要があります。そこで、ユーザーIDフィールドにonblurイベントを使用して、Controllerメソッドを呼び出すことを考えました。この問題への取り組み方を教えてもらえますか?初心者のImとして、コードスニペットは高く評価されています。
前もって感謝します、
プラシャーント
これが例です。コントローラメソッドの例
[HttpPost] // can be HttpGet
public ActionResult Test(string id)
{
bool isValid = yourcheckmethod(); //.. check
var obj = new {
valid = isValid
};
return Json(obj);
}
これがjavascript関数になります。
function checkValidId(checkId)
{
$.ajax({
url: 'controllerName/Test',
type: 'POST',
contentType: 'application/json;',
data: JSON.stringify({ id: checkId }),
success: function (valid)
{
if(valid) {
//show that id is valid
} else {
//show that id is not valid
}
}
});
}
JQuery.get()、System.Web.Mvc.JsonResultを参照してください。
例えば:
<script type="text/javascript">
$('#userID').blur(function()
{
$.get('/Home/ValidateUserID/' + $(this).val(), {},
function(data, status)
{
if( !data.success ) {
alert('User ID is invalid!');
}
});
});
</script>
GETリクエストをキャッチするためのアクションが必要です。
public class HomeController
{
[HttpGet]
public ActionResult ValidateUserID(string id)
{
bool superficialCheck = true;
return Json(new { success = superficialCheck },
JsonRequestBehavior.AllowGet);
}
}
いくつかのポイント、順不同:
.get
は、コントローラーアクションに一致するURLであることに注意してください。#userID
htmlフィールドの値はURLの最後に追加され、MVCがそれをアクションパラメーターにデータバインドできるようにしますValidateUserID(string id)
。Controller.Json
メソッドは、.NETオブジェクトをJavaScriptオブジェクトとしてフォーマットします。data
フォーマットされたオブジェクトは、コールバック関数の場合と同様にJQueryによって受信されます。JsonRequestBehavior.AllowGet
からブラウザにデータを返しても問題ないことをMVCに通知します.GET
。サーバー側の検証のように聞こえるので、これにはクライアント側の検証機能を使用できる可能性があります。
http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx
一般に、これはajax呼び出しを使用して実行できます(jQueryを使用しているかどうかはわかりませんが、そうでなく、特別な制限がない場合は、これに使用することをお勧めします)。
http://api.jquery.com/jQuery.ajax/
クライアント側:
$.ajax({
url: '@Url.Action("ActionName", "ControllerName")',
type: "POST",
async: true,
dataType: "json",
data: $('#form').serialize(),
success: function (data) {
// process result
},
error: function (request, status, error) {
// process error message
}
});
サーバー側:
[HttpPost]
public virtual ActionResult ActionName()
{
return Json("value")
}
ただし、一般的にはASP.NET MVC 3 Ajaxからグーグルで検索する必要があります。これに関する情報はWebにたくさんあり、すでに必要なものが正確に見つかる可能性があります。
コントローラーのサーバー側アクションでRemoteValidation属性を使用して、MVC Unobstrusive javascriptですべてを実行でき、1行のJS/Jqueryを記述する必要はありません。
これがあなたにできることです:
呼び出されたコントローラーとパラメーターを受け入れるAccountController
呼び出されたアクションがある場合、これをビューに配置できます。CheckPassword
string password
$('#texboxId').blur(function() {
$.ajax({
url: '/Account/CheckPassword',
data: { password: $('#texboxId').val() },
success: function(data) {
// put result of action into element with class "result"
$('.result').html(data);
},
error: function(){
alert('Error');
}
});
});
コントローラのアクションは、おおよそ次のようになります。
public class AccountController : Controller
{
public ActionResult CheckPassword(string password)
{
bool passwordIsCorrect = //do your checking;
string returnString = "whatever message you want to send back";
return Content(returnString);
}
}