簡體   English   中英

ASP.NET MVC 3不引人注目的驗證 - 在驗證事件之前?

[英]ASP.NET MVC 3 Unobtrusive Validation - Before Validate Event?

使用ASP.NET MVC3的不顯眼的驗證功能如何在驗證運行之前運行一些JavaScript? 出於顯而易見的原因,Jquery的提交處理程序在驗證后運行。 我可以點擊提交按鈕,但這看起來並不優雅。 有什么建議么?

編輯

看來我的上述陳述是不正確的。 如下所述,提交處理程序確實在驗證之前運行。 不幸的是,這並沒有解決我的問題。

我修改過的問題:

我需要在表單提交之后但在jQuery驗證之前操作表單值。 如果我在使用jQuery的提交處理程序提交后更改值,則jQuery驗證原始值而不是新值。

驗證后,提交處理程序不會運行。 它之前運行。 試試吧:

$('form').submit(function () {
    alert('validation hasn\'t run yet at this point => see there is no red color over your form input fields yet');

    if ($(this).valid()) {
        alert('the form is valid');
    } else {
        alert('the form is not valid');
    }
});

更新:

在修改后的問題之后,我仍然無法重現這個問題。 這是我的模特:

public class MyModel
{
    [Required]
    public string Name { get; set; }
}

這是我的看法:

@model MyModel

<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>           

@using (Html.BeginForm(null, null, FormMethod.Post, new { }))
{
    @Html.EditorFor(x => x.Name)
    @Html.ValidationMessageFor(x => x.Name)
    <input type="submit" value="OK" />
}

<script type="text/javascript">
    $('form').submit(function () {
        $('#Name').val('some value');
    });
</script>

現在,如果我將“名稱”字段留空並提交表單,則會正確分配新值,並且表單已成功提交給服務器而沒有任何錯誤。 如果我刪除$('#Name').val('some value'); 分配新值並嘗試使用空字段客戶端驗證觸發器提交表單的行,並且不提交表單。

我不確定它是否是一個解決方案,但你可以查看IClientValidatable Interface http://msdn.microsoft.com/en-us/library/system.web.mvc.iclientvalidatable(v=vs.98)的.aspx

這是一個例子(相當古老)但應該在當前版本中工作:ASP.NET MVC:在ASP.NET MVC 3預覽中向ValidatePasswordLengthAttribute添加客戶端驗證http://blogs.msdn.com/b/stuartleeks/archive/2010 /07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp-net-mvc-3-preview-1.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM