哪一个更好?当页面中只有一个表单时,Ajax帖子或页面发布[Controller httppost]?

时间:2015-02-09 08:47:20

标签: ajax asp.net-mvc http-post postback form-submit

我有一个名为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 });
}

我在这里失踪的是什么。

2 个答案:

答案 0 :(得分:1)

回发

  1. 浏览器处理 - 我能想到的唯一优势是浏览器将为您处理重定向和进度加载。您不需要编写逻辑来重定向用户或显示加载栏。
  2. AJAX

    1. Asynsconous - 使用AJAX,您可以获得异步调用,因此浏览器线程不会被阻止。这允许用户在等待您的请求的响应时仍然与UI进行交互。

    2. 更好的表现 - 您通常不需要重新加载整个页面,从而减少了开销。正在发出HTTP请求。

    3. 仅供参考 - 您仍然可以使用JsonResult建模绑定

      public JsonResult BookProgram(Mymodel model)
      {
             //code to save into db
             return Json(result);
      }
      

答案 1 :(得分:1)

回发 - 是一个经典的工作流程。将大部分内部工作委托给您的webbrowser。您在服务器端计算的所有响应逻辑。

AJAX - 是一种构建动态Web应用程序的现代方法。单页应用程序的基本方法。在这种情况下,大多数工作应该在客户端完成。