加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – MVC3客户端验证无法使用Ajax.BeginForm表单

发布时间:2020-12-16 07:34:07 所属栏目:asp.Net 来源:网络整理
导读:我在局部视图中有以下表格 @model PartDetail@using (Ajax.BeginForm("Create","Part",null,new AjaxOptions { UpdateTargetId = "update_panel"})){ h3New @Model.PartType/h3 p Serial Number: strong @Html.EditorFor(model = model.SerialNumber) @Html.
我在局部视图中有以下表格

@model PartDetail
@using (Ajax.BeginForm("Create","Part",null,new AjaxOptions { UpdateTargetId =       "update_panel"}))
{
    <h3>New @Model.PartType</h3>
    <p> Serial Number: 
        <strong>
            @Html.EditorFor(model => model.SerialNumber)
            @Html.ValidationMessageFor(model => model.SerialNumber)
        </strong>
    </p>
    <p> Name: 
        <strong>
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </strong>
    </p>
    ...... more relatively boiler plate code here......
    <p>
        <input type="submit" class="btn primary" value="Save Part"/>
    </p>
}

随着模型

public class PartDetail
{
    public string DateCreated { get; set; }
    [StringLength(255,MinimumLength = 3)]
    public string Description { get; set; }
    public Guid ID { get; set; }
    public string IsActive { get; set; }
    public string Manufacturer { get; set; }
    public IEnumerable<SelectListItem> Manufacturers { get; set; }
    [StringLength(100,MinimumLength = 3)]
    public string Name { get; set; }
    public string PartType { get; set; }
    [Required]
    [StringLength(100,MinimumLength = 3)]
    public string SerialNumber { get; set; }
}

我参考(在我的部分视图的父视图中)

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"> </script>
<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>

没有任何东西得到验证.如果我在序列号文本框中没有输入任何内容并按提交,则将其保存到数据库中没有任何问题.

解决方法

尝试将一个OnBegin回调添加到AjaxOptions,这应该工作.

function validateForm() { 
   return $('form').validate().form(); 
} 

@using (Ajax.BeginForm("Create",new AjaxOptions { UpdateTargetId = "update_panel",OnBegin = "validateForm" }))
...

如果这对您不起作用,另一种解决方案可能是使用jQuery提交表单.这将是我的首选解决方案.

<div id="result"></div> 

@using (Html.BeginForm()) 
{ 
<h3>New @Model.PartType</h3>
<p>Serial Number: 
    <strong>
        @Html.EditorFor(model => model.SerialNumber)
        @Html.ValidationMessageFor(model => model.SerialNumber)
        </strong>
    </p>
    <p> Name: 
        <strong>
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </strong>
    </p>
    ...... more relatively boiler plate code here......
    <p>
        <input type="submit" class="btn primary" value="Save Part"/>
    </p>

    }

jQuery / JS函数提交表单

$(function () { 
        $('form').submit(function () { 

        $.validator.unobtrusive.parse($('form'));  //added

            if ($(this).valid()) { 
                $.ajax({ 
                    url: this.action,type: this.method,data: $(this).serialize(),success: function (result) { 
                        $('#result').html(result); 
                    } 
                }); 
            } 
            return false; 
        }); 
    });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读