Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 “必需”验证属性在asp.net mvc 3中不起作用,而其他属性起作用_Asp.net Mvc 3_Validation - Fatal编程技术网

Asp.net mvc 3 “必需”验证属性在asp.net mvc 3中不起作用,而其他属性起作用

Asp.net mvc 3 “必需”验证属性在asp.net mvc 3中不起作用,而其他属性起作用,asp.net-mvc-3,validation,Asp.net Mvc 3,Validation,我有一个奇怪的情况,我为我的实体对象创建了一个单独的验证类: [MetadataType(typeof(TopTenFav_Validation))] public partial class TopTenFav { } public class TopTenFav_Validation { [Required(ErrorMessage = "Youtube link is Required")] [StringLength(100, ErrorMessage="You

我有一个奇怪的情况,我为我的实体对象创建了一个单独的验证类:

   [MetadataType(typeof(TopTenFav_Validation))]
public partial class TopTenFav
{

}
public class TopTenFav_Validation
{

    [Required(ErrorMessage = "Youtube link is Required")]
    [StringLength(100, ErrorMessage="Youtube link cannot exceed 100 characters")]
    [Range(10,20)]
    public string YoutubeLink { get; set; }


    [StringLength(100, ErrorMessage = "Youtube link cannot exceed 50 characters")]
    [Required]
    [MinLength(5, ErrorMessage = "Youtube link cannot be shorter than 30 characters")]
    public string Title { get; set; }
}
实体对象的名称与我的验证类-TopTenFav相同,因此当我刷新时,它应该自动将验证逻辑映射到我的实体框架对象。我有一个小表单,将文本框映射到模型,如下所示:

         <div>
            @Html.TextBoxFor(m => m.topTenFav.YoutubeLink, new { id = "youTubeLinkTxt"          })
            @Html.ValidationMessageFor(m => m.topTenFav.YoutubeLink,"*")
        </div>

         <div>
            @Html.TextBoxFor(m => m.topTenFav.Title, new { id = "youTubeNameTxt" })
             @Html.ValidationMessageFor(m => m.topTenFav.Title,"*")
        </div>
问题是,当其他属性工作时,required属性不工作,这意味着当我将文本框留空并向服务器进行ajax调用时,代码会传递成功消息,但当我键入未传递minLenght验证程序的数据时,代码会像我预期的那样转到ajax调用的错误部分。那么,当我的文本框为空时,所需的验证器没有启动,我遗漏了什么呢

    $(document).on("click", ".btnAddTopTenFav", function () {
        var btnClicked = $(this);
        var txtLink = $('#youTubeLinkTxt').val();
        var txtName = $('#youTubeNameTxt').val();
        var subLink = txtLink.substr(31); //.replace(/.*\?v=/, '');
        var rank = $(this).parent().index() + 1;
        $("#hiddenRank").val(rank);

        $.ajax({
            beforeSend: function () { ShowAjaxLoader(); },
            url: "/Home/AddTopTenFav/",
            type: "POST",
            data: $("#AddTopTenFavForm").serialize(),
            success: function (data) { HideAjaxLoader(), ShowMsg("Song Added Successfully"), $(btnClicked).replaceWith('<a name="' + subLink + '" class="savedLinks"  href="#" >' + txtName + '</a><span name=' + data + ' class="btnDeleteTopTenFavSong dontDoAnything">x</span'); },
            error: function () { HideAjaxLoader(), ShowMsg("Song could not be added, please try again") }
        });


  [HttpPost]
    public ActionResult AddTopTenFav(HomeViewModel topTen)
    {
        if (ModelState.IsValid)
        {
            var top = new TopTenFav();
            top.Date = DateTime.Now;
            top.Rank = topTen.topTenFav.Rank;
            top.UserName = User.Identity.Name;
            top.YoutubeLink = topTen.topTenFav.YoutubeLink;
            top.Title = topTen.topTenFav.Title;
            repository.AddTopTen(top);
            repository.Save();
            return this.Content(top.SongId.ToString());
        }
        else 
        {
            return View();
        }

问题在于,您没有在发布之前调用验证

MinLength验证器会启动,因为您在字段中输入数据,然后离开,这将调用该字段的验证。但是,所需的验证器仅在由表单的提交事件调用或手动调用表单验证时才会激发

添加以下内容以将代码包装到$document.onclick、.btnAddTopTenFav函数中:

$("form").validate().form();
if ($("form").valid())
{
    // insert the rest of your submission code here
}

这将调用验证,并且只有在表单有效时才会提交。

问题在于,您没有在发布之前调用验证

MinLength验证器会启动,因为您在字段中输入数据,然后离开,这将调用该字段的验证。但是,所需的验证器仅在由表单的提交事件调用或手动调用表单验证时才会激发

添加以下内容以将代码包装到$document.onclick、.btnAddTopTenFav函数中:

$("form").validate().form();
if ($("form").valid())
{
    // insert the rest of your submission code here
}

这将调用验证,并且只有在表单有效时才会提交。

请发布控制器的代码。您如何在AJAX调用中调用验证。请添加有关调用的详细信息。请发布控制器的代码。您如何在AJAX调用中调用验证。请添加有关通话的详细信息。一个问题tho,为什么添加。验证后填写表格。它会做什么?表单会导致所有验证消息更新。还有一件事,当验证未通过时,它会显示一条*而不是我想要的消息。我如何在textbox.focus上淡出或隐藏验证消息。例如,焦点?如果您有自定义消息,则不应在ValidationMessageFor中声明*。例如,只需声明@Html.ValidationMessageForm=>m.topTenFav.YoutubeLink。一个问题是,为什么在validate之后添加.form。它会做什么?表单会导致所有验证消息更新。还有一件事,当验证未通过时,它会显示一条*而不是我想要的消息。我如何在textbox.focus上淡出或隐藏验证消息。例如,焦点?如果您有自定义消息,则不应在ValidationMessageFor中声明*。例如,只需声明@Html.ValidationMessageForm=>m.topTenFav.YoutubeLink。