我使用 MVC3 架构,c#.net。当焦点更改为下一个字段(即密码字段)时,我需要立即将文本框内容(用户 ID)与数据库进行比较。所以我想对 User Id 字段使用 onblur 事件,然后调用 Controller 方法。谁能告诉我如何解决这个问题?作为一个新手,代码片段受到高度赞赏。
提前致谢,
普拉桑特
我使用 MVC3 架构,c#.net。当焦点更改为下一个字段(即密码字段)时,我需要立即将文本框内容(用户 ID)与数据库进行比较。所以我想对 User Id 字段使用 onblur 事件,然后调用 Controller 方法。谁能告诉我如何解决这个问题?作为一个新手,代码片段受到高度赞赏。
提前致谢,
普拉桑特
这是一个例子。控制器方法示例
[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
附加到 URL 的末尾,允许 MVC 将其数据绑定到操作参数ValidateUserID(string id)
中。Controller.Json
方法将 .NET 对象格式化为 JavaScript 对象。格式化的对象由 JQuery 接收,就像data
在回调函数中一样。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 搜索,网络上有很多关于此的内容,您可能已经找到了您需要的内容。
您可以在控制器上使用 RemoteValidation 属性和服务器端操作,通过 MVC Unobtrusive javascript 为您完成所有操作,而无需为其编写单行 JS/Jquery。
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);
}
}