使用动态表单进行ASP.Net MVC 3客户端验证

Dav*_*veo 13 jquery jquery-validate asp.net-mvc-3

我正在尝试手动验证,所以我可以通过AJAX发布我的表单.

我也在动态加载我的表单 $("#formHolder").load(url);

当我将页面加载到DIV时,它总是验证为true,即使我的输入框为空.

即打电话 if($("#MyForm").valid()) //is always true

但是,如果我直接转到页面URL,它可以正常工作.

因此,如何在加载窗体后正确初始化窗体,.load(url);因为它在首次打开时不存在于页面上

我的Javascript是

$('.myLink').click(function () {
    var url = '/newsletter/info/'; // this loads my HTML form from another page/view at runtime
    $("#formHolder").load(url, function () {
            $("#MyForm").validate(); // I thought this line would initialise it once it loads
           }).dialog({
        modal: true,
        width:800,
        height: 600
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

Dav*_*veo 15

$.validator.unobtrusive.parse() 在表单加载后手动调用工作

我在这里找到了解决方案http://btburnett.com/2011/01/mvc-3-unobtrusive-ajax-improvements.html


Abd*_*mon 9

最好的解决方案就是$.validator.unobtrusive.parse('#frmToBeValidated')在你的ajax加载动态表单后立即调用.


Yng*_*sen 8

你的问题没有说明你是否需要做任何自定义来验证表单,所以我肯定会使用MVC3的内置jquery不显眼的验证:

如果这是你的型号:

public class Person
{
    [Required(ErrorMessage = "Email address required")]
    [DataType(DataType.EmailAddress, ErrorMessage = "Please enter valid email address")]
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您的视图中的此表单代码将使用最少量的设置立即启用验证:

@model MvcApplication12.Models.Person

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Ajax.BeginForm(new AjaxOptions())) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Person</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在发布表单时获得更多功能,则可以使用AjaxOptions:

new AjaxOptions() { UpdateTargetId = "formupdate", 
                    OnSuccess = "javascript:alert('success');", 
                    OnFailure = "javascript:alert('failure');", 
                    OnComplete = "javascript:alert('complete');", 
                    OnBegin = "javascript:alert('begin');" })
Run Code Online (Sandbox Code Playgroud)

当表单提交,完成,失败或开始时,这使您可以完全控制自定义操作.

希望这可以帮助!