"Erforderlich" validation-Attribut funktioniert nicht im asp.net mvc 3, während andere arbeiten

Ich habe eine seltsame situation, wo ich eine separate Validierung Klasse für meine Person-Objekt:

   [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; }
}

Entity-Objekt-name ist der gleiche wie mein Validierung Klasse - TopTenFav, so wie ich red, es sollte eine automatische Zuordnung der Validierungslogik, um mein Entity-Framework-Objekte. Ich habe ein kleines Formular, wo ich Textfelder zugeordnet, um das Modell wie folgt:

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

Ist das problem, dass das required-Attribut ist nicht zu arbeiten, während andere arbeiten, was bedeutet, dass, wenn ich lassen Sie die Textfelder leer und ich einen ajax-call an den server übergibt der code auf den Erfolg, aber wenn ich die Art der Daten, die nicht passieren die minLenght validator der code geht auf die Fehler ein Teil meiner ajax-Aufruf, wie ich erwartet hatte. So was vermisse ich hier, dass die erforderliche Prüfung nicht feuern, wenn meine Textfelder leer sind???

    $(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();
        }
  • Post den code für die Controller bitte
  • Wie sind Sie mit der aufrufen-Validierung in deinem AJAX-Aufruf. Bitte fügen Sie details über den Anruf.
  • added code
Schreibe einen Kommentar