4

我使用 MVC3 架构,c#.net。当焦点更改为下一个字段(即密码字段)时,我需要立即将文本框内容(用户 ID)与数据库进行比较。所以我想对 User Id 字段使用 onblur 事件,然后调用 Controller 方法。谁能告诉我如何解决这个问题?作为一个新手,代码片段受到高度赞赏。

提前致谢,

普拉桑特

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);
    }
}

几点,不分先后:

  • 请注意,第一个参数 to.get是控制器操作的匹配 URL?
  • html 字段的值#userID附加到 URL 的末尾,允许 MVC 将其数据绑定到操作参数ValidateUserID(string id)中。
  • Controller.Json方法将 .NET 对象格式化为 JavaScript 对象。格式化的对象由 JQuery 接收,就像data在回调函数中一样。
  • 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 搜索,网络上有很多关于此的内容,您可能已经找到了您需要的内容。

于 2012-07-25T07:27:10.743 回答
1

您可以在控制器上使用 RemoteValidation 属性和服务器端操作,通过 MVC Unobtrusive javascript 为您完成所有操作,而无需为其编写单行 JS/Jquery。

于 2012-07-25T08:00:43.873 回答
0

here is what you could do:

Given that you have controller called AccountController and action called CheckPassword that accepts parameter string password, you could put this in your view:

$('#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');
        }
    });
});

Your controller action would approximately look like this:

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 回答