Метод частичного просмотра MVC3 не стреляет - PullRequest
0 голосов
/ 14 января 2012

У меня есть частичное представление (логин, имя пользователя, пароль и кнопка «Отправить»), и частичное представление используется на моей _layout (materpage).

Итак, на моей странице _layout у меня есть:

<div style="text-align: right">
    @Html.Partial("_LoginPartial")
</div>

Мой _LoginPartial имеет следующий код:

    @if (Request.IsAuthenticated)
{
    <textarea>Welcome!
        [ @Html.ActionLink("Log Off", "Logout", "Account")]</textarea>

}
else
{
    @Html.Partial("~/Views/Account/Index.cshtml")
}

Файл индекса для отображения окна входа выглядит следующим образом:

  @using GalleryPresentation.Models
@model LoginModel

<script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script>
@using (Html.BeginForm("index", "Account"))
{
    <table>
        <tr>
            <td>@Html.LabelFor(m => m.Username)</td>
            <td>@Html.TextBoxFor(m => m.Username)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(m => m.Password)</td>
            <td>@Html.PasswordFor(m => m.Password) kjkj</td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Login"/></td>
        </tr>
        <tr>
            <td colspan="2">@Html.ValidationSummary()</td>
        </tr>
    </table>

}

В моем AccountCOntroller,У меня есть следующий код:

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

    [HttpPost]
    public ActionResult Index(LoginModel loginModel)
    {
        if(ModelState.IsValid)
        {
            var g = new GallaryImage();
            var user = g.LoginUser(loginModel.Username, loginModel.Password);
            if(user != null) 
            {
                FormsAuthentication.SetAuthCookie(user.username, false);
                return RedirectToAction("Index", "Home");
            }
            ModelState.AddModelError("", "Invalid Username/Password");
        }
        return View(loginModel);
    }

    public ActionResult Logout()
    {
        FormsAuthentication.SignOut();
        return RedirectToAction("Index", "Home");
    }

У меня есть точки останова на всех методах - но они никогда не получают удар.Нажатие кнопки «Отправить» просто меняет мой URL-адрес на:

http://localhost:8741/?Username=myusername&Password=mypassword

Может кто-нибудь заметить ошибку, которую я делаю?

1 Ответ

1 голос
/ 14 января 2012

Поскольку Html.BeginForm по умолчанию делает запросы GET, вы делаете запрос GET с вашего взгляда.Однако ваше действие принимает только запросы POST.

Вы можете изменить @using (Html.BeginForm("index", "Account")) на @using (Html.BeginForm("index", "Account", FormMethod.Post)).

...