"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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem ist, dass Sie nicht aufrufen überprüfung stattfinden, bevor Sie buchen.
Den
MinLength
Prüfer Feuer, weil Sie die Eingabe von Daten in das Feld, dann verlassen Sie es, die unter Berufung auf die Validierung für das Feld. Jedoch, dieRequired
Prüfungen wird nur ausgelöst, wenn aufgerufen, die das Formular der submit-Ereignis, oder wenn Sie manuell aufrufen Validierung für die form.Fügen Sie den folgenden, um wickeln Sie den code in Ihrem
$(document).on("click", ".btnAddTopTenFav"
Funktion:Diese wird aufgerufen, die überprüfung, und wird nur dann Einreichen, wenn das Formular gültig ist.
form()
wird dazu führen, dass alle, die Validierung von Nachrichten aktualisiert werden."*"
in IhremValidationMessageFor
. Zum Beispiel, nur erklären@Html.ValidationMessageFor(m => m.topTenFav.YoutubeLink)
.