我的模型類:FluentValidation斷言驗證不起作用
[FluentValidation.Attributes.Validator(typeof(CrcValidator))]
public class CrcModel
{
[Display(Name = "Binary value")]
public string binaryValue { get; set; }
[Display(Name = "Generator")]
public string generator { get; set; }
}
和校驗類斷言:
public class CrcValidator : AbstractValidator<CrcModel>
{
public CrcValidator()
{
RuleFor(x => x.binaryValue)
.NotEmpty().WithMessage("Binary value is required")
.Matches(@"(0|1)*").WithMessage("This value is not valid binary value");
RuleFor(x => x.generator)
.NotEmpty().WithMessage("Generator is required")
.Matches(@"(0|1)*").WithMessage("Generator must be valid binary value")
.Must(CompareLength).WithMessage("Length must be lesser than length of binary value - 1");
}
private bool CompareLength(CrcModel model, string value)
{
return model.binaryValue.Length - 1 > model.generator.Length;
}
}
我把CompareLength函數和每個值內斷點正確地從構成讀。問題是即使我的謂詞函數返回false,我的表單也會通過驗證。 NotEmpty和Matches規則完美地工作得很好只好似乎被忽視。
編輯
的jQuery的提交(類型爲 「按鈕」)按鈕:
$(function() {
$("#Button1").click(function() {
var form = $("#Form1");
if ($(form).valid()) {
$.ajax({
type: 'POST',
url: 'Compute',
data: $(form).serialize(),
success: function (result) {
$("#remainder").val(result.remainder);
$("#signal").val(result.signal);
}
});
}
});
});
控制器動作處理表單提交:
從必由之路[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Compute([Bind(Include = "binaryValue,generator")] CrcModel model)
{
if (ModelState.IsValid)
{
model.remainder = ComputeFrame(model.binaryValue, model.generator);
model.signal = model.binaryValue + model.remainder;
}
return Json(new { remainder = model.remainder, signal = model.signal });
}
驗證規則適用於服務器一面但消息不顯示。
不幸的是,這也不起作用。 – Cheerup
嗯。奇怪。我已經在ASP.NET MVC 4中使用過這種類型的東西,它工作正常。所以'ModelState.IsValid'報告'真'? –
哦,親愛的,其實我忘了在我的控制器中檢查ModelState.IsValid,我假設如果給定的消息沒有顯示,則謂詞不起作用。使用ModelState.IsValid驗證從謂詞工作更新我的控制器後,確實仍然不顯示消息。任何想法可能是消息的問題? – Cheerup