Почему действие Http Get вызывается вместо действия Http post?

Я работаю с 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" />

Пожалуйста, помогите, спасибо.


person Khoa Tran    schedule 09.02.2015    source источник
comment
Рассматривали ли вы добавление атрибута [HttpGet] для первого действия SignUp(), теория заключается в том, что маршрутизация ASP.Net будет знать, какой метод действия вызывать на основе того, какой метод был использован.   -  person chridam    schedule 09.02.2015
comment
Если вы проверили отображаемый HTML, это то, что вы ожидаете?   -  person Levesque    schedule 09.02.2015
comment
@chridam, если вы не укажете метод, он будет получен по умолчанию   -  person Khoa Tran    schedule 09.02.2015
comment
@Levesque да, html найден, особенно тег формы имеет действие с методом публикации   -  person Khoa Tran    schedule 09.02.2015
comment
Это показалось мне непонятным, поэтому я собрал новый проект и использовал ваш контроллер и представление для его тестирования. Это сработало, как и ожидалось. В вашей ситуации происходит что-то другое. Одна вещь, которую можно попробовать, — это использовать такой инструмент, как Fiddler, чтобы убедиться, что ваша форма действительно отправляет обратно всю информацию. Если привязка модели по какой-то причине не удалась, это может объяснить, почему была выбрана версия SignUp без аргументов.   -  person Craig W.    schedule 09.02.2015
comment
Я обнаружил проблему, я сделал ошибку, поставив дополнительный тег формы снаружи. Результат такой неожиданный.   -  person Khoa Tran    schedule 09.02.2015


Ответы (1)


Не могли бы вы попробовать добавить [AllowAnonymous]

к почтовому методу?

Вы где-нибудь активировали глобальную авторизацию System.Web.Mvc.AuthorizeAttribute?

person BGStack    schedule 09.02.2015