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" />
請幫忙,謝謝。
你有沒有考慮加入'[HTTPGET]'的第一個'註冊()'action屬性,背後的理論是,ASP.Net的路由便會知道哪些行動方法調用基於該方法已被使用。 – chridam 2015-02-09 15:20:46
如果您檢查了呈現的HTML,是否您期望? – Levesque 2015-02-09 15:29:43
@chridam如果未指定方法,它是在默認情況下得到 – 2015-02-09 15:35:33