我真的很困惑, 这是代码:
[HttpPost]
public ActionResult Settings(string SubmitButton)
{
if (SubmitButton == "Sign In") {
ServiceLocator.Current.GetInstance<IAppContext>().LoggedUser = null;
Response.Cookies["loginuser"].Expires = DateTime.Now;
return RedirectToAction("Logon", "Account");
}
if (SubmitButton == "Sign Up") { return RedirectToAction("register", "Account"); }
if (SubmitButton == "Change Default Ride Settings") { return RedirectToAction("changeSettings", "Home"); }
return View();
}
视图包含
<% using (Html.BeginForm()) { %>
Three input ,
<% } %>
控制器不会使用httppost触发,而是使用httpget
触发答案 0 :(得分:2)
如果您希望发布帖子,则必须生成一个html表单,并将method属性设置为post:
Html.BeginForm("action","controller", FormMethod.Post) { ... }
答案 1 :(得分:2)
您可能需要在视图中传入Html.BeginForm()中的控制器和操作名称。由于正在为HTTP get请求调用[HttpPost] Settings()操作,这意味着没有针对get请求的另一个Settings()操作,因此我猜测您的视图是通过其他操作提供的。在这种情况下,您需要在Html.BeginForm()中显式设置控制器和操作。试试这个:
<% using (Html.BeginForm("Settings", "YourControllerName")) { %>
答案 2 :(得分:0)
应该有名称为Index()的操作,并且不应包含任何参数。这是我遇到的问题。
答案 3 :(得分:0)
我使用ActionName()来解决同样的问题,
不工作代码:
[HttpGet]
public ViewResult RsvpForm()
{
[HttpPost]
public ViewResult RsvpFrom()
{
}
工作代码:
[HttpGet]
public ViewResult RsvpForm()
{
}
[HttpPost, ActionName("RsvpForm")]
public ViewResult RsvpFromPost()
{
}
答案 4 :(得分:0)
使用剃刀的正确方法
@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { id = "form1" }))
{
//form content
}