首先发帖,请温柔:)
我对MVC3相对较新,正在构建一个工作中的webapp。
我有几个CheckBoxes页面打开/关闭功能,当它们发生变化时我通过jQuery Ajax调用提交并返回json成功/失败给我,这样我就可以显示一条消息。
我有一些表单,其中包含一些我刚刚提交的字段(不是使用Ajax)并检查模型状态是否有效等等。如果没有,则重新显示表单和消息。我想用Ajax来做这件事。
我有一个使用Ajax.BeginForm的表单,它正确地提交给控制器,模型被验证,如果有错误,我返回一个部分视图,使用UpdateTargetId替换。
我想要做的就是这个...如果模型有效并且保存成功,我需要返回一个局部视图,因为UpdateTargetId将替换我的表单,无论如何。我想发回某种“成功”标志,以便我可以显示一条消息,说“您的数据已保存”或其他内容。
如果Ajax调用成功,则触发OnSuccess,并且不关心模型是否有效。
我可以使用jQuery.Ajax提交表单并在控制器中返回返回PartialView以及成功或失败我认为?
在构建“Ajax”网络应用时,有谁可以说出最佳做法是什么?
答案 0 :(得分:2)
您可以使用普通的javascript代替使用Ajax.Beginform
辅助方法来处理此问题。
@model ProductViewModel
<div id="divForm">
@using(Html.Beginform())
{
@Html.TextBoxFor(x=>x.Name)
@Html.TextBoxFor(x=>x.Location)
<input type="submit" id="btnSave" />
}
</div>
<div id="divItem" />
<script type="text/javascript">
$(function(){
$("#btnSave").click(function(e){
e.preventDefault(); // prevent the default form submit
var form=$(this).closest("form");
$.post(form.attr("action"),form.serialize(),function(result){
if(result.Status=="success")
{
//show message and load the new partial view if needed.
$(#divForm").hide();
$("#divItem").html(reuslt.ViewHTML);
}
else
{
alert("Error");
}
});
});
});
</script>
假设您有一个HttpPost操作方法,它接受我们的表单子句并返回JSON数据。
[HttpPost]
public ActionResult Edit(ProductViewModel model)
{
// here you may validate the model and save if needed and return JSON back.
//to do : return JSON
}
响应JSON应采用以下格式。
{ "Status" : "success", "ViewHTML" : "<p>This is some markup</p>" }
This回答解释了如何在JSON响应中返回ViewResult。