【发布时间】:2015-02-09 08:47:20
【问题描述】:
我有一个名为 Bookprogram 的页面,其中包含 6 个输入控件,即 txtName、txtEmail、txtPhone、selectcat[类别下拉列表]、txtDate、txtMessage。现在,当完成上述控件的所有验证后,我想将数据存储在 db 中。我知道如何在 ajax 和完整的页面发布中执行。
如果它在 ajax 中,在验证后,我只需调用 $.ajax 并将数据作为字符串发布并在控制器中获取它,如下所示:
[HttpPost]
public JsonResult BookProgram(string name, string email, string phone, string category, string date, string message)
{
//code to save into db
return Json(result);
}
如果我必须发布整个页面,在验证后我只需执行 $(form).submit(); 并在控制器中编写如下:
[HttpPost]
public ActionResult Bookprogram(Mymodel model)
{
//Code to save the data
return View();
}
我只是想知道哪个更好,更安全,更好用,因为我必须在提交成功后显示一条消息。我知道我可以采用任何一种方式来显示消息,但是在这种情况下是否真的需要回发[页面刷新],如果是的话,它与 ajax 发布相比有什么优势?
编辑:
我刚刚通过 this 链接并尝试实施第二个投票最高答案的解决方案,但由于我的运气不好,它并没有击中控制器本身。我在控制器中保留了断点。
$(form).on("submit", function (e) {
e.preventDefault();
ValidateForm(form);
var selectedVal = $(form).find('select').children(":selected").val();
if(selectedVal=="")
{
$(form).find('div.bootstrap-select').children(":first").addClass('alert-danger');
$(form).find('div.bootstrap-select').next('.text-danger').html('Please select a category!');
}
var formContainer = $(form + ' .text-danger');
if ($(formContainer).text().length == 0) {
$.ajax({
url: '/Home/BookProgram/',
type: "POST",
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: $('#fbookprogram').serializeArray(),
success: function (data) {
if (data.result == "Success") {
alert('success');
}
else {
alert('fail');
return false;
}
return true;
}
});
}
$(form).unbind('submit');
return false;
});
控制器:
public ActionResult BookProgram(MyModel model)
{
if(ModelState.IsValid)
{
//code to save data
}
return Json(new { success = false });
}
我在这里缺少什么。
【问题讨论】:
-
你仍然可以使用
public ActionResult Bookprogram(Mymodel model)来发布 ajax 帖子(你应该这样做,因为你可以利用模型绑定和检查ModelState.IsValid) -
@StephenMuecke 好的,这很酷。发布数据的安全性和时间消耗有什么不同吗?
-
您采用哪种方式实际上取决于您保存数据后的操作。如果你所做的只是显示一条消息,我只会做一个正常的提交。如果模型有错误,您可以返回视图(利用
ModelState错误和ValidationMessageFor()来显示它们)。如果数据保存正常,则重定向到另一个视图(例如可以显示成功消息的索引或详细信息视图(使用TempData)。但是,如果您想返回视图以在页面上执行其他操作,则ajax 可能会更好。 -
根据您的第一个代码 sn-p,我怀疑您必须手动构建回发值 - 您可以使用
$.post(url, $('form').serialize(), function(data) { // do something ... -
这是很好的解释@StephenMuecke.. 谢谢你..
标签: ajax asp.net-mvc http-post postback form-submit