Я работаю с 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() вместо действия Post SignUp(User u).
Еще одна проблема, даже в форме есть метод публикации, когда нажмите «Отправить», URL-адрес содержит входную информацию, как и метод «получить», я не понимаю.
Вот html-источник страницы тега формы.
<form action="/CM/SignUp" method="post"><input name="__RequestVerificationToken" type="hidden" value="VJ0YcQr1Z-l3Qo717pRpZNT-QtL59G2EJXy2JQL8NFnOm-XoNnAD-8T-Itz3i1EboGj0bhpBf2G26ifxm4F5ZRyKimkOyZW1AxZ3ckPNuRk1" />
Пожалуйста, помогите, спасибо.
[HttpGet]
для первого действияSignUp()
, теория заключается в том, что маршрутизация ASP.Net будет знать, какой метод действия вызывать на основе того, какой метод был использован. - person chridam   schedule 09.02.2015