我的控制器返回 JsonResult 并且我根本不想使用 Razor 视图,我想要使用 JQuery AJAX 的普通 Html 页面向控制器操作发出请求。我能够做到这一切,但我希望 JQuery 使用 Jquery 不显眼地验证我的模式(比如说在创建订单 [表单验证] 时),以便我可以显示 Dataannotation 属性错误消息而不是客户端验证错误。
请参阅下面的代码
我的控制器代码如下
[HttpPost]
public JsonResult SaveMovies(Movie movie)
{
AjaxResponse response = new AjaxResponse { Success = false };
try
{
_movieRepository.Add(movie);
_movieRepository.Save();
response.Data = "Movie added";
response.Success = true;
}
catch (Exception ex)
{
response.Success = false;
response.Message = "An exception occur while fetching data" + Environment.NewLine + "Method: " + ex.TargetSite + Environment.NewLine + "Source: " + ex.Source + Environment.NewLine + "Message: " + ex.Message;
MoviesLogger logger = new MoviesLogger();
logger.Error(ex);
}
return Json(response, JsonRequestBehavior.AllowGet);
}
我的 Jquery 代码如下
$("#save").click(function () {
var movie = {
Title: $('#TitleTextBox').val(),
ReleaseDate: $('#ReleaseDateTextBox').val(),
Genre: $('#GenreTextBox').val(),
};
if (isValid(movie)) {
SendRequest("Movies", "SaveMovies", JSON.stringify(movie), "post", function (response) { // AJAX Success
$("#Notification").html("Movie Added");
}, function (response) { // AJAX Fail
alert("Fail");
alert(response.Message);
});
}
else {
$('#errorDiv').html(""); // THIS DIV WILL LIST ALL THE error messages FROM MY POCO CLASS DataAnnotations Attributes
}
});
函数isValid代码如下
function isValid(Movie) {
try {
/*
I WANT TO VALIDATE THE POCO MODAL(Movie) AGAINST ALL DataAnnotations Attributes set in there
MY Movie POCO is as under
public class Movie
{
[Key]
public int ID { get; set; }
[StringLength(20)]
[Required(ErrorMessage="Title is required")]
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
}
*/
return true;
} catch (e) {
return false;
}
}
函数 SendRequest 代码如下
function SendRequest(controller, action, data, type, onSuccess, onError) {
if (type.toLowerCase() == 'post')
data = JSON.stringify(data);
$.ajax({
url: baseUrl + '/' + controller + '/' + action,
dataType: 'json',
type: type,
data: data,
contentType: "application/json; charset=utf-8",
success: onSuccess,
error: onError
});