Mvc4 при нажатии кнопки не перенаправляется на действие [HttpPost]

в моем контроллере у меня есть эти действия

public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public ActionResult Register()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Register(RegisterModel user)
        {
            if (ModelState.IsValid )
            {
                var regUser = _db.Users.Create();

                regUser.UserName = user.UserName;
                regUser.Password = user.Password;

                _db.Users.Add(regUser);
                _db.SaveChanges();
            }

            return RedirectToAction("Index");
        }

а мой взгляд такой

@model BootstrappingMvc.Models.RegisterModel
@{
    ViewBag.Title = "Register";
    Layout = "~/Views/Shared/_BootstrapLayout.empty.cshtml";
}


<form class="form-signin">
    <h2 class="form-signin-heading">Register New User</h2>
    <div class ="input-block-level">@Html.TextBoxFor(model=>model.UserName, new{@placeholder = "UserName"})</div>
    <div class ="input-block-level">@Html.PasswordFor(model=>model.Password, new{@placeholder ="Password"})</div>
    <div class ="input-block-level">@Html.PasswordFor(model=>model.ConfirmPassword, new{@placeholder = "Confirm Password"})</div>

    <button class="btn btn-large btn-primary" type="submit">Register</button>
</form>

вот мой RegisterModel

public class RegisterModel
    {
        public int Id { get; set; }

        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

Разве я не должен быть перенаправлен на [httpPost] действие контроллера, когда пользователь нажимает кнопку регистрации? Прямо сейчас это приводит меня к действию [httpget] при нажатии кнопки, и я получаю это в браузере http://localhost:47944/Portal/Register?UserName=Biplov+&Password=123456&ConfirmPassword=123456

Я действительно не могу понять, как я получаю эти значения в браузере и почему меня не перенаправляют на действие [httpPost].


person Cybercop    schedule 31.05.2013    source источник


Ответы (3)


Вы можете сделать так:

@using (Html.BeginForm("Register", "yourcontroller"))
    {
      <h2 class="form-signin-heading">Register New User</h2>
<div class ="input-block-level">@Html.TextBoxFor(model=>model.UserName, new{@placeholder = "UserName"})</div>
<div class ="input-block-level">@Html.PasswordFor(model=>model.Password, new{@placeholder ="Password"})</div>
<div class ="input-block-level">@Html.PasswordFor(model=>model.ConfirmPassword, new{@placeholder = "Confirm Password"})</div>

<button class="btn btn-large btn-primary" type="submit">Register</button>
    }
person Altaf Sami    schedule 31.05.2013

Вам нужно добавить следующую строку в свой код, чтобы опубликовать представление на контроллере Post Action

<form class="form-signin" method="post" action="Register">

<h2 class="form-signin-heading">Register New User</h2>

<div class ="input-block-level">@Html.TextBoxFor(model=>model.UserName,new{@placeholder = "UserName"})</div>

<div class ="input-block-level">@Html.PasswordFor(model=>model.Password,new{@placeholder ="Password"})</div> <div class ="input-block-level">@Html.PasswordFor(model=>model.ConfirmPassword,new{@placeholder = "Confirm Password"})</div>

<button class="btn btn-large btn-primary" type="submit">Register</button></form>

person sandeep modi    schedule 01.06.2013

@using(Html.BeginForm("Register","Controller to be forwarded",FormMethod.Post))
{
    <h2 class="form-signin-heading">Register New User</h2>
    <div class ="input-block-level">@Html.TextBoxFor(model=>model.UserName, new{@placeholder = "UserName"})</div>
    <div class ="input-block-level">@Html.PasswordFor(model=>model.Password, new{@placeholder ="Password"})</div>
    <div class ="input-block-level">@Html.PasswordFor(model=>model.ConfirmPassword, new{@placeholder = "Confirm Password"})</div>

    <button class="btn btn-large btn-primary" type="submit">Register</button>
}

Я думаю, что использование помощника Html для создания формы и добавление параметра FormMethod.Post гарантируют уверенность.

person Cybercop    schedule 28.03.2014