1

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

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

一切正常。

当我点击“保存”按钮提交表单时,效果很好。

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

索引.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" />
  }

家庭控制器.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

4 回答 4

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");
}
于 2012-11-30T15:39:49.363 回答
0

有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>

让我知道它是否有效:)

于 2012-11-30T15:46:44.300 回答
0

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

于 2012-12-05T13:35:57.910 回答
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. 

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

于 2012-12-03T15:16:34.113 回答