我有 Asp Mvc3 应用程序。在我看来,我正在使用 kendoui + knockoutjs。我正在使用剑道验证器处理客户端验证。我对 asp mvc3 很陌生,我无法让我的服务器端验证工作。
这是我的业务对象:
[Validator(typeof(FranchiseInfoValidator))]
public class FranchiseInfo
{
public string FullName { get; set; }
public string ShortName { get; set; }
}
}
我正在使用 FluentValidation。这是我的验证规则的实现:
public class FranchiseInfoValidator : AbstractValidator<FranchiseInfo>
{
public FranchiseInfoValidator()
{
RuleFor(franchiseInfo => franchiseInfo.FullName).NotEmpty();
RuleFor(franchiseInfo => franchiseInfo.ShortName).NotEmpty();
}
}
这是我的视图模型:
public class FranchiseInfoViewModel
{
public string FullName { get; set; }
public string ShortName { get; set; }
}
这是我对 FranchiseInfoViewModel 的强类型视图:
@model MvcApplication2.Models.FranchiseInfoViewModel
<script src="../../Scripts/Details.js" type="text/javascript"></script>
<form id="franchiseForm" action="" style="font-family: Trebuchet MS, Verdana, Helvetica, Sans-Serif;">
<table>
<tr>
<td><label for="fullName">FullName:</label></td>
<td><input id="fullName" data-bind= "value: FullName" /></td>
</tr>
<tr>
<td><label for="shortName">ShortName:</label></td>
<td><input id="shortName" data-bind= "value: shortName" /></td>
</tr>
</table>
<button id="submit" class="k-button" data-bind="click: save" form="franchiseForm">Save Franchise</button>
</form>
在提交表单时,我正在调用 javascript 函数保存:
$(function () {
save = function () {
// some logic
$.ajax({
url: "/franchise/SaveFranchise",
type: "POST",
data: { franchiseInfoViewModel: jsonData },
dataType: 'json',
success: function (data, textStatus, xhr) {
window.location.href = data.redirectToUrl;
}
});
}
});
在保存时,我以 json 格式提交数据并将数据发送到 SaveFranchise 控制器:
public ActionResult SaveFranchise(string franchiseInfoViewModel)
{
var franchiseInfoVM = JsonConvert.DeserializeObject<FranchiseInfoViewModel>(franchiseInfoViewModel);
if (!ModelState.IsValid)
{
// do some action
}
return View();
}
我想要完成的是(!ModelState.IsValid)
返回视图并显示流畅的验证错误消息。出于某种原因,在我的情况下 ModelState.IsValid 总是正确的。
如前所述,我对 Asp Mvc 3 非常陌生。从我读过的文章中,示例是将表单提交到有绑定的服务器(没有 javascript),并将服务器验证消息返回到视图。但是那里的视图是用 Razor 实现的,客户端验证是通过 jquery 完成的。
在我看来,我正在使用带有数据绑定( kendoui + 淘汰赛)的 javascript 视图模型。在我的情况下,我应该怎么做服务器端验证。请帮我。感谢您的时间和精力!