我有,我已經創建了一個單獨的驗證類我的實體對象一個奇怪的情況:「必需」驗證屬性不能在asp.net mvc的3個工作,而其他工作
[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>
的問題是,所需要的屬性是不工作,而其他工作,這意味着當我離開的文本框爲空,我做一個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();
}
爲您的控制器發佈代碼請 – Dismissile
您如何在您的AJAX調用中調用驗證。請添加有關通話的詳細信息。 – counsellorben
加上代碼 –