Validation MVC淘汰验证显示和
我第一次使用击倒,我正在努力让我的头脑围绕一个问题 我有一个包含多个部分的页面,希望能够编辑一个部分并提交给控制器,然后显示保存的详细信息 每个部分都是一个局部视图,其中包含显示信息和表单。它们根据需要显示和隐藏。我有用于提交的代码,但问题是当ModelState无效时。我需要返回表单并显示验证消息 当服务器验证失败时,如何再次显示表单?当验证失败时,它当前返回到显示部分 我还注意到验证消息没有显示 我相信这一定是一个常见的问题与一个简单的修复。我知道有淘汰验证工具,但以后将需要进行更复杂的业务逻辑验证,并且需要让技术发挥作用 视图模型:Validation MVC淘汰验证显示和,validation,jquery,model-view-controller,knockout.js,Validation,Jquery,Model View Controller,Knockout.js,我第一次使用击倒,我正在努力让我的头脑围绕一个问题 我有一个包含多个部分的页面,希望能够编辑一个部分并提交给控制器,然后显示保存的详细信息 每个部分都是一个局部视图,其中包含显示信息和表单。它们根据需要显示和隐藏。我有用于提交的代码,但问题是当ModelState无效时。我需要返回表单并显示验证消息 当服务器验证失败时,如何再次显示表单?当验证失败时,它当前返回到显示部分 我还注意到验证消息没有显示 我相信这一定是一个常见的问题与一个简单的修复。我知道有淘汰验证工具,但以后将需要进行更复杂的业务
[Required]
public DateTime? InterviewDate { get; set; }
function InterviewViewModel() {
//Data
var self = this;
var jsonDate = @Html.Raw(Json.Encode(@Model.InterviewDate));
var date = new Date(parseInt(jsonDate.substr(6)));
self.interviewDate = ko.observable(dateFormat(date, "dd/mm/yyyy"));
self.showAdminInterviewDisplay = ko.observable(true);
self.showAdminInterviewForm = ko.observable();
self.showInterviewForm = function () {
self.showAdminInterviewDisplay(false);
self.showAdminInterviewForm(true);
$("#interviewDatePicker").datepicker({dateFormat: 'dd/mm/yy'});
};
//Operations
self.saveInterviewDate = function() {
$.ajax("@Url.Action("SaveInterview")", {
data: ko.toJSON(self),
type: "post",
contentType: "application/json",
success: function(data) {
self.showAdminInterviewDisplay(true);
self.showAdminInterviewForm(false);
}
});
};
};
ko.applyBindings(new InterviewViewModel());
视图:
控制器:
public ActionResult SaveInterview(KnockoutViewModel model)
{
if (ModelState.IsValid)
{
return Json(model);
}
return PartialView("_AdminInterview", model);
}
if(ModelState.IsValid)
{
//Do whatever here
return Json(new { model });
}
return Json(new JsonErrorModel {ErrorList = ModelState.Errors()});
在AJAX调用中,将序列化的错误模型返回给success函数,而不是从动作方法返回部分视图。错误模型将包含ModelState中的所有错误 有关如何从模型状态获取和使用错误的信息,请参阅本文: (JK的回答) 所以你会有这样的想法: 错误模型:
public class JsonErrorModel
{
public JsonErrorModel()
{
HasFailed = true;
}
public bool HasFailed { get; set; }
public IEnumerable ErrorList { get; set; }
}
控制器:
public ActionResult SaveInterview(KnockoutViewModel model)
{
if (ModelState.IsValid)
{
return Json(model);
}
return PartialView("_AdminInterview", model);
}
if(ModelState.IsValid)
{
//Do whatever here
return Json(new { model });
}
return Json(new JsonErrorModel {ErrorList = ModelState.Errors()});
AJAX调用的成功函数:
success: function (result) {
if(result.HasFailed) {
self.showAdminInterviewDisplay(false);
self.showAdminInterviewForm(true);
DisplayErrors(result.ErrorList);
}
else {
self.showAdminInterviewDisplay(true);
self.showAdminInterviewForm(false);
}
}
现在,如果服务器端验证失败,视图将显示表单和验证错误