[英]Use Remote validation in ASP.NET MVC without form on View
我在ASP.NET MVC 4應用程序的ViewModel
上使用Remote
屬性。 這是我的簡單模型:
public class User
{
[Required(AllowEmptyStrings = false, ErrorMessage = "test test")]
public int Id { get; set; }
[DisplayName("Email")]
[Remote("RemoteValidateEmailLengthValidation", "Home")]
public string Email { get; set; }
}
和遠程驗證方法:
public JsonResult RemoteValidateEmailLengthValidation(string Email)
{
if (Email.Length > 20)
{
return Json("Too long email", JsonRequestBehavior.AllowGet);
}
else
{
return Json(true, JsonRequestBehavior.AllowGet);
}
}
我在Layout
上添加了驗證所需的所有腳本:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
在WebConfig
寫下驗證所需的全部內容:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
並添加創建空模型並返回View
簡單Controller
。
@model ViewModels.User
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("PostUser", "Home", FormMethod.Post))
{
@Html.EditorForModel()
<input type="submit" />
}
僅當我將模型包裝在form
它才起作用,而當我這樣編寫View
不起作用 :
@model ViewModels.User
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.EditorForModel()
所以我有問題:
OnChange
? 我可以在任何地方看到它,也可以更改它嗎? 客戶端非侵入式驗證涉及
HtmlHelper
的GetUnobtrusiveValidationAttributes方法。 執行各種檢查,如果未滿足所有條件(例如,已禁用UnobtrusiveValidation),則不會呈現客戶端驗證所需的data-val
屬性 jquery.validation.unobtrusive.js
,它首先檢查<form>
標記的存在,然后基於data-val
屬性,添加供jquery.validate
使用的規則,消息等jquery.validate
。 第一個調用的函數是
parse: function (selector) {
var $forms = $(selector)
.parents("form")
.andSelf()
.add($(selector).find("form"))
.filter("form");
....
其中selector
是html文檔元素。 如果沒有<form>
元素,則var $forms
是未定義的,僅執行其他操作。 如果沒有<form>
元素,則客戶端驗證根本無法工作。
目前尚不清楚為什么會生成不在表單中的html表單控件,但是您可以簡單地對控制器函數進行調用,返回一條消息並顯示它
public JsonResult RemoteValidateEmailLengthValidation(string Email)
{
if (Email.Length > 20)
{
return Json("Too long email", JsonRequestBehavior.AllowGet);
}
else
{
return Json(null, JsonRequestBehavior.AllowGet);
}
}
和腳本
var url = '@Url.Action("RemoteValidateEmailLengthValidation", "Home")';
var placeHolder = $('[data-valmsg-for="Email"]');
$('#Email').change(function() {
$.getJSON(url, { Email: $(this.val() }, function(response) {
if(response) {
placeHolder.text(response).removeClass('field-validation-valid').addClass('field-validation-error');
}
});
});
並處理.keyup
事件以刪除錯誤消息並重置類名
無法在ASPNET 5中找到JsonRequestBehavior
[HttpGet]
public JsonResult IsAllowedName(string FirstMidName)
{
if (FirstMidName.ToLower() == "oleg")
{
//It seems that Microsoft.Asp.Net.Mvc does
//not contain JsonRequestBehavior enum
return Json(false, JsonRequestBehavior.AllowGet);
}
return Json(true);
}
終端輸出
dnu build
/.../Controllers/ValidationController.cs(20,24):
DNXCore,Version=v5.0 error CS0103:
The name 'JsonRequestBehavior' does not exist in the current context
Build failed.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.