我正在与MVC合作并花了一整天时间来解决这个问题。这是控制器的代码:
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()而不是后期操作SignUp(User u)。
还有一个问题,即使表单有post方法,当点击提交url包含输入信息就像get方法一样,我不明白。
以下是表单标记的页面html源代码。
<form action="/CM/SignUp" method="post"><input name="__RequestVerificationToken" type="hidden" value="VJ0YcQr1Z-l3Qo717pRpZNT-QtL59G2EJXy2JQL8NFnOm-XoNnAD-8T-Itz3i1EboGj0bhpBf2G26ifxm4F5ZRyKimkOyZW1AxZ3ckPNuRk1" />
请帮助,谢谢。
答案 0 :(得分:1)
你可以尝试添加 [使用AllowAnonymous]
到post方法?
您是否在任何地方激活了全局授权 System.Web.Mvc.AuthorizeAttribute ?