提交表单后无法访问操作

时间:2012-11-30 15:14:51

标签: c# asp.net-mvc-3

我遇到以下问题(我花了很多时间寻找解决方案)。

“创建”按钮有一个点击事件,可以调用“主页”控制器上的“测试”操作。

一切正常。

当我点击“保存”按钮,提交表单时,该工作正常。

但在我提交表单后,我的“创建”按钮停止工作。 “创建”按钮确实有点击事件,但“测试”操作无法访问?

index.cshtml

<script type="text/javascript">
     $(document).ready(function () {
         $("#create").click(function () {
             $.ajax({
                 type: "POST",
                 traditional: true,
                 url: 'Home/Test',
                 dataType: "html",
                 success: function (data) {
                    alert('Succes!')
                 },
                 error: function () {
                     alert('A problem ocurred!!');
                 }
             });

         });
     });
</script>

 <input id="create" type="button" value="Create" />
  @using (Html.BeginForm("SaveForm", "Home"))
  {
      <input type="submit" value="Save" />
  }

HomeController.cs

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }

    public ActionResult Test() 
    {
        return Content("Test result");
    }

    public ActionResult SaveForm()
    {
        return View("Index");
    }
    public ActionResult About()
    {
        return View();
    }
}

4 个答案:

答案 0 :(得分:1)

您的所有操作都只是GET。向POST操作添加[HttpPost](仅限POST)或[AcceptVerbs(HttpVerbs.Post, HttpVerbs.Get)](GET或POST)属性。

[HttpPost]
public ActionResult Test() 
{
    return Content("Test result");
}

[HttpPost]
public ActionResult SaveForm()
{
    return View("Index");
}

答案 1 :(得分:0)

Theres 2问题:

1)你的方法上面没有[HttpPost]

2)您没有向控制器发送任何数据

使用匿名类为您的表单添加ID:

@using (Html.BeginForm("SaveForm", "Home", new {id = "testform"}))

然后重写ajax请求:

<script type="text/javascript">
     $(document).ready(function () {
         $("#create").click(function () {
             $.ajax({
                 type: "POST",
                 data: $("#testform").serialize();
                 url: 'Home/Test',
                 dataType: "html",
                 success: function (data) {
                    alert('Succes!')
                 },
                 error: function () {
                     alert('A problem ocurred!!');
                 }
             });

         });
     });
</script>

让我知道它是否有效:)

答案 2 :(得分:0)

要创建实体,您必须通过回复或ajax将您的数据提交到服务器,就像您的情况一样。现在您的代码中存在一些矛盾:)

1. Why are you calling one action as form action and another through
   ajax? Because since your button will post back, your ajax call won't
   fire the success and error handlers. To solve this either use <button> or 

$("#create").click(function (e) { e.preventDefault();//Some code});

2. If you want to use ajax, write it like this. Also write [HttpPost] on 
   your action. This indicates that this action can be called by post requests.
   This is a required step, whether or not you are using ajax. 

我希望这能解决你的问题。

答案 3 :(得分:0)

最终我使用了Ajax.BeginForm而不是Html.BeginForm,将[HttpPost]属性添加到我的动作中,并使用了RedirectToAction(“Index”)而不是PartialView。这解决了我的问题。再次感谢您的提示!