无法从View调用Post ActionResult

时间:2015-06-19 04:51:30

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

我试图通过调用Controller中的ActionResult从我的View发出POST请求。基本上,视图中有一个事件列表,用户可以通过单击事件来查看事件的详细信息。这部分有效。但是,一旦他们查看详细信息,他们也可以注册该活动。这是不起作用的部分。

我从视图中尝试的示例操作:

@Html.ActionLink("SignUp", "SignUp", new {id = "2"}, null)

这应该访问此操作结果:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SignUp(int id)
{
    if (ModelState.IsValid)
    {
        var registratie = new Registratie(User.Identity.GetUserId(), id);
        _db.Registraties.Add(registratie);
        _db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View("Index");
}

但是,我收到404错误。我认为它无法找到行动结果?

详细信息操作结果在同一页面上然后起作用:

// GET: /EventPlanner/Details/5
public ActionResult Details(int id)
{
    var evenement = _db.Evenementen.Single(e => e.ID == id);

    return View(evenement);
}

我不明白为什么注册会给出404.任何想法?

2 个答案:

答案 0 :(得分:4)

您无法使用ActionLink发出POST请求。您有以下备选方案。

  1. 使用submit按钮发布表单
  2. 使用Ajax.ActionLink()
  3. 使用jQuery.ajax
  4. 我会推荐submit按钮,因为我觉得它比其他按钮简单。

    作为第一种方法的一个例子。试试这个

    剃刀:

    @using (@Html.BeginForm("ActionName", "ControllerName"))
    {
        <input type="hidden" name="id" value="2" />
        <input type="submit" value="Post" />
    }
    

    控制器:

    public class ControllerNameController : Controller
    {
           [HttpPost]
            public ActionResult ActionName(string id)
            {
                //Your stuff
    
                return View();
            }
    }
    

答案 1 :(得分:2)

这是因为您的详细信息操作方法是Get方法,而您的SignUp操作方法使用[HttpPost]属性进行修饰,这意味着它是Post方法。从您的操作方法中删除HttpPost,它将运行。

编辑:

出于您的目的,我建议您使用@Lmadoddin Ibn Alauddin的方法 建议。 您可以将数据放在form标记下,然后使用submit按钮提交(我不建议您查看代码,也不要发布HTML)。 要么: 您可以使用$.ajax()进行type: 'POST'来电并传递数据,例如数据:{id:'idvalue'}。

希望这会对你有所帮助。如果您遇到任何问题,请告诉我。