4

私はMVC3アーキテクチャ、c#.netを使用しています。次のフィールド、つまりパスワードフィールドにフォーカスが変わったら、すぐにテキストボックスの内容(ユーザーID)をデータベースと比較する必要があります。そこで、ユーザーIDフィールドにonblurイベントを使用して、Controllerメソッドを呼び出すことを考えました。この問題への取り組み方を教えてもらえますか?初心者のImとして、コードスニペットは高く評価されています。

前もって感謝します、

プラシャーント

4

5 に答える 5

9

これが例です。コントローラメソッドの例

[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 
              }
         }
    });
}
于 2012-07-25T07:39:47.787 に答える
2

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であることに注意してください。
  • #userIDhtmlフィールドの値はURLの最後に追加され、MVCがそれをアクションパラメーターにデータバインドできるようにしますValidateUserID(string id)
  • このController.Jsonメソッドは、.NETオブジェクトをJavaScriptオブジェクトとしてフォーマットします。dataフォーマットされたオブジェクトは、コールバック関数の場合と同様にJQueryによって受信されます。
  • JsonRequestBehavior.AllowGetからブラウザにデータを返しても問題ないことをMVCに通知します.GET
于 2012-07-25T07:39:41.157 に答える
1

サーバー側の検証のように聞こえるので、これにはクライアント側の検証機能を使用できる可能性があります。

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にたくさんあり、すでに必要なものが正確に見つかる可能性があります。

于 2012-07-25T07:27:10.743 に答える
1

コントローラーのサーバー側アクションでRemoteValidation属性を使用して、MVC Unobstrusive javascriptですべてを実行でき、1行のJS/Jqueryを記述する必要はありません。

于 2012-07-25T08:00:43.873 に答える
0

これがあなたにできることです:

呼び出されたコントローラーとパラメーターを受け入れるAccountController呼び出されたアクションがある場合、これをビューに配置できます。CheckPasswordstring 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);
    }
}
于 2012-07-25T07:46:54.657 に答える