我试图通过调用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.任何想法?
答案 0 :(得分:4)
您无法使用ActionLink
发出POST
请求。您有以下备选方案。
submit
按钮发布表单Ajax.ActionLink()
jQuery.ajax
。我会推荐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'}。
希望这会对你有所帮助。如果您遇到任何问题,请告诉我。