Ajax MVC中json的成功与失败响应
我在练习Ajax!我有一个简单的联系方式,以下是我的行动:Ajax MVC中json的成功与失败响应,ajax,asp.net-mvc,razor,Ajax,Asp.net Mvc,Razor,我在练习Ajax!我有一个简单的联系方式,以下是我的行动: public ActionResult Contact() { return View("Contact"); } [HttpPost] public ActionResult Contact(ContactViewModel contactViewModel) { if (ModelState.IsVali
public ActionResult Contact()
{
return View("Contact");
}
[HttpPost]
public ActionResult Contact(ContactViewModel contactViewModel)
{
if (ModelState.IsValid)
{
var contact = contactViewModel.ConvertToContactModel();
_contactRepository.Add(contact);
_contactRepository.Save();
return Json(new { msg = "Your contact Sent, I'll response soon." });
}
return Json("Sorry! Somthing went wrong, try again or contact again");
}
这是我的观点:
@model Blog.Web.UI.ViewModels.ContactViewModel
@{
ViewBag.Title = "Contact";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div id="Contact">
@using (Ajax.BeginForm("Contact", "Home", new AjaxOptions() { OnSuccess = "Success" }))
{
<div>
@Html.LabelFor(c => c.Name)
@Html.TextBoxFor(c => c.Name)
</div>
<div>
@Html.LabelFor(c => c.Email)
@Html.TextBoxFor(c => c.Email)
@Html.ValidationMessageFor(c => c.Email)
</div>
<div>
@Html.LabelFor(c => c.Subject)
@Html.TextBoxFor(c => c.Subject)
</div>
<div>
@Html.LabelFor(c => c.Body)
@Html.TextAreaFor(c => c.Body)
@Html.ValidationMessageFor(c => c.Body)
</div>
<input type="submit" value="Send" />
}
</div>
<script type="text/javascript">
function Success(context) {
if (context[0]) {
$("#Contact").empty().html(context[1]);
}
}
</script>
@model Blog.Web.UI.ViewModels.ContactViewModel
@{
ViewBag.Title=“联系人”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@使用(Ajax.BeginForm(“联系人”、“主页”、新的AjaxOptions(){OnSuccess=“Success”}))
{
@LabelFor(c=>c.Name)
@Html.TextBoxFor(c=>c.Name)
@LabelFor(c=>c.Email)
@Html.TextBoxFor(c=>c.Email)
@Html.ValidationMessageFor(c=>c.Email)
@LabelFor(c=>c.Subject)
@Html.TextBoxFor(c=>c.Subject)
@LabelFor(c=>c.Body)
@Html.TextAreaFor(c=>c.Body)
@Html.ValidationMessageFor(c=>c.Body)
}
函数成功(上下文){
if(上下文[0]){
$(“#Contact”).empty().html(上下文[1]);
}
}
现在我想向用户展示联系成功与否,我的代码出了什么问题??
有趣的是,我的验证在这种情况下不起作用!
请帮我解决这个问题,谢谢如果您希望发送错误响应,那么您应该将响应对象的ResponseCode设置为合适的http错误代码,例如400表示错误请求
然后,您需要在ajax.beginform中提供一个错误处理程序来显示所需的内容。如果不这样做,它将返回一个200的响应代码,也就是说,一切都很好,因此不会触发错误处理程序。与Slicksim相反,我们通常在应用程序模型中定义一个JSON返回类,其中包含一个布尔变量Success。然后,我们可以使用它让Javascript确定请求是否成功
public class JsonResponseModel(){
public bool Success {get;set;}
public string Message {get;set;}
}
public ActionResult Contact()
{
return View("Contact");
}
[HttpPost]
public ActionResult Contact(ContactViewModel contactViewModel)
{
if (ModelState.IsValid)
{
var contact = contactViewModel.ConvertToContactModel();
_contactRepository.Add(contact);
_contactRepository.Save();
return Json(new JsonResponseModel{ Success = true, Messsage = "Your contact Sent, I'll response soon." });
}
return Json(new JsonResponseModel{Success = false, Message = "Sorry! Somthing went wrong, try again or contact again"});
}
<script type="text/javascript">
function Success(response) {
if (response.Success) {
$("#Contact").empty().html(response.Message);
}
else{
alert(response.Message);
}
}
</script>
public类JsonResponseModel(){
公共bool成功{get;set;}
公共字符串消息{get;set;}
}
公共行动结果联系人()
{
返回视图(“联系人”);
}
[HttpPost]
公共操作结果联系人(ContactViewModel ContactViewModel)
{
if(ModelState.IsValid)
{
var contact=contactViewModel.ConvertToContactModel();
_contactRepository.Add(联系人);
_contactRepository.Save();
返回Json(新的JsonResponseModel{Success=true,message=“您的联系人已发送,我将很快回复。”});
}
返回Json(新建JsonResponseModel{Success=false,Message=“抱歉!出现问题,请重试或再次联系”});
}
功能成功(响应){
if(response.Success){
$(“#Contact”).empty().html(response.Message);
}
否则{
警报(response.Message);
}
}
我想这就是我们所走的路线,而不是修改服务器头,因为如果AJAX调用而不是实际的服务器错误(HTTP状态代码500/404/etc)导致验证失败,您可能需要做一些不同的事情