我正在练习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>
现在我想显示用户成功或联系失败,我的代码无法解决的问题是什么? 它非常有趣,我的验证在这种情况下不起作用! 请帮帮我,谢谢
答案 0 :(得分:1)
如果你想要发送错误响应,那么你应该将Response对象的ResponseCode设置为合适的http错误代码,例如400错误请求。
然后,您需要在ajax.beginform中提供错误处理程序以显示所需的内容。如果你不这样做,它将返回一个200的响应代码,并认为所有东西都是hunky dory,所以你的错误处理程序不会被触发
答案 1 :(得分:0)
与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>
我认为这是我们去的路线,而不是修改服务器头,因为如果AJAX调用验证失败而不是实际服务器错误(HTTP Status COde 500/404 / etc),您可能想要做一些不同的事情