gpt4 book ai didi

jquery - 将 ASP.NET MVC 验证与 jquery ajax 一起使用?

转载 作者:IT王子 更新时间:2023-10-29 03:24:44 25 4
gpt4 key购买 nike

我有像这样的简单 ASP.NET MVC 操作:

public ActionResult Edit(EditPostViewModel data)
{

}

EditPostViewModel 具有如下验证属性:

[Display(Name = "...", Description = "...")]
[StringLength(100, MinimumLength = 3, ErrorMessage = "...")]
[Required()]
public string Title { get; set; }

在 View 中我使用了以下助手:

 @Html.LabelFor(Model => Model.EditPostViewModel.Title, true)

@Html.TextBoxFor(Model => Model.EditPostViewModel.Title,
new { @class = "tb1", @Style = "width:400px;" })

如果我在一个表单上提交这个文本框,验证将首先在客户端完成,然后在服务(ModelState.IsValid)上完成。

现在我有几个问题:

  1. 这可以与 jQuery ajax 提交一起使用吗?我所做的只是删除表单,点击提交按钮后,javascript 将收集数据,然后运行 ​​$.ajax

  2. 服务器端 ModelState.IsValid 会工作吗?

  3. 我如何将验证问题转发回客户端并呈现它,就好像我正在使用构建 int 验证 (@Html.ValidationSummary(true))?

    <

Ajax 调用示例:

function SendPost(actionPath) {
$.ajax({
url: actionPath,
type: 'POST',
dataType: 'json',
data:
{
Text: $('#EditPostViewModel_Text').val(),
Title: $('#EditPostViewModel_Title').val()
},
success: function (data) {
alert('success');
},
error: function () {
alert('error');
}
});
}

编辑 1:

包含在页面上:

<script src="/Scripts/jquery-1.7.1.min.js"></script>
<script src="/Scripts/jquery.validate.min.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>

最佳答案

客户端

使用 jQuery.validate 库应该很容易设置。

Web.config 文件中指定以下设置:

<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

当你构建你的 View 时,你会定义这样的东西:

@Html.LabelFor(Model => Model.EditPostViewModel.Title, true)
@Html.TextBoxFor(Model => Model.EditPostViewModel.Title,
new { @class = "tb1", @Style = "width:400px;" })
@Html.ValidationMessageFor(Model => Model.EditPostViewModel.Title)

注意:这些需要在表单元素中定义

然后您需要包含以下库:

<script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'></script>
<script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script>

这应该能够为您设置客户端验证

资源

服务器端

注意:这仅用于在jQuery.validation

之上进行额外的服务器端验证

也许这样的事情可以帮助:

[ValidateAjax]
public JsonResult Edit(EditPostViewModel data)
{
//Save data
return Json(new { Success = true } );
}

其中 ValidateAjax 是定义为的属性:

public class ValidateAjaxAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
return;

var modelState = filterContext.Controller.ViewData.ModelState;
if (!modelState.IsValid)
{
var errorModel =
from x in modelState.Keys
where modelState[x].Errors.Count > 0
select new
{
key = x,
errors = modelState[x].Errors.
Select(y => y.ErrorMessage).
ToArray()
};
filterContext.Result = new JsonResult()
{
Data = errorModel
};
filterContext.HttpContext.Response.StatusCode =
(int) HttpStatusCode.BadRequest;
}
}
}

它的作用是返回一个指定所有模型错误的 JSON 对象。

示例响应是

[{
"key":"Name",
"errors":["The Name field is required."]
},
{
"key":"Description",
"errors":["The Description field is required."]
}]

这将返回给 $.ajax 调用的错误处理回调

您可以循环遍历返回的数据,根据返回的键根据需要设置错误消息(我认为类似于 $('input[name="' + err.key + '"]') 会找到你的输入元素

关于jquery - 将 ASP.NET MVC 验证与 jquery ajax 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com