Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax MVC中json的成功与失败响应_Ajax_Asp.net Mvc_Razor - Fatal编程技术网

Ajax MVC中json的成功与失败响应

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

我在练习Ajax!我有一个简单的联系方式,以下是我的行动:

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)导致验证失败,您可能需要做一些不同的事情