2015-02-09 66 views
2

我正在與MVC合作,花了整整一天的時間陷入了這個問題。下面是代碼在控制器:爲什麼Http獲取操作被調用而不是Http post操作?

public class CMController : Controller 
{ 
    public ActionResult SignUp() 
    { 
     return View("SignUpPage"); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult SignUp(User u) 
    { 
     if (ModelState.IsValid) 
     { 
      using (CmdbEntities dc = new CmdbEntities()) 
      { 
       dc.Users.Add(u); 
       dc.SaveChanges(); 
       ModelState.Clear(); 
       u = null; 
       ViewBag.Message = ("Successfully sign on"); 
      } 
     } 
     else 
     { 
      ViewBag.Message = ("Error"); 
     } 
     return View("Welcome"); 
    } 

} 

這裏是SignUpPage.cshtml視圖:

@using (Html.BeginForm("SignUp", "CM", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
     <div class="form-group" style="padding:5px 50px"> 
      <label> First name:</label> 
      <div> 
       @Html.TextBoxFor(model => model.FirstName, new {@class="form-control", placeholder="Enter first name", ID="FirstName"}) 
      </div> 
     </div> 
     <div class="form-group" style="padding:5px 50px"> 
      <label >Last name:</label> 
      <div> 
       @Html.TextBoxFor(model => model.LastName, new {@class="form-control", placeholder="Enter first name", ID="LastName"}) 
      </div> 
     </div> 
     <div class="form-group" style="padding:5px 50px"> 
      <label for="email">Email:</label> 
      <div> 
       @Html.TextBoxFor(model => model.Email, new {@class="form-control", placeholder="Enter email", ID="Email", type="email"}) 
      </div> 
     </div> 
     <div class="form-group" style="padding:5px 50px"> 
      <label >User name:</label> 
      <div> 
       @Html.TextBoxFor(model => model.UserName, new {@class="form-control", placeholder="Enter user name", ID="UserName"}) 
      </div> 

     </div> 
     <div class="form-group" style="padding:5px 50px"> 
      <label for="pwd">Password:</label> 
      <div> 
       @Html.TextBoxFor(model => model.Password, new {@class="form-control", placeholder="Enter password", ID="Password", type="password"}) 
      </div> 
     </div> 
     <div class="form-group" style="padding:5px 50px"> 
      <label for="pwd">Confirm password:</label> 
      <div> 
       @Html.TextBoxFor(model => model.ConfirmPassword, new {@class="form-control", placeholder="Re-enter password", ID="_password", type="password"}) 
      </div> 
     </div> 
     <div class="form-group" style="padding:5px 50px"> 
      <div> 
       <input type="submit" ID="SignUp" class="btn btn-success" value="Sign Up" /> 
      </div> 
     </div> 
    } 

的問題是,當負載頁第一次,動作註冊()被調用,其是正確的。但是在提交表單時,會再次調用SignUp(),而不是發佈操作SignUp(User u)。

還有一個問題,即使形式有方法後,點擊提交網址中包含輸入信息,就像get方法的時候,我不明白。

這裏是表單標籤的頁面html源代碼。

<form action="/CM/SignUp" method="post"><input name="__RequestVerificationToken" type="hidden" value="VJ0YcQr1Z-l3Qo717pRpZNT-QtL59G2EJXy2JQL8NFnOm-XoNnAD-8T-Itz3i1EboGj0bhpBf2G26ifxm4F5ZRyKimkOyZW1AxZ3ckPNuRk1" /> 

請幫忙,謝謝。

+0

你有沒有考慮加入'[HTTPGET]'的第一個'註冊()'action屬性,背後的理論是,ASP.Net的路由便會知道哪些行動方法調用基於該方法已被使用。 – chridam 2015-02-09 15:20:46

+0

如果您檢查了呈現的HTML,是否您期望? – Levesque 2015-02-09 15:29:43

+0

@chridam如果未指定方法,它是在默認情況下得到 – 2015-02-09 15:35:33

回答

1

能不能請你加入 [使用AllowAnonymous]

到POST方法?您是否激活全球授權 System.Web.Mvc.AuthorizeAttribute ?

相關問題