2013-04-08 3 views
2

Я создал один веб-сайт, используя форму для входа. Сначала я создаю форму для входа только для теста в разделе «Учетная запись/вход в систему». Затем некоторые из них должны изменить все страницы, чтобы они отображали логин. Поэтому я создать частичную и вызвать в _Layout.cshtml следующее,Получить значения с частичного просмотра mvc razor

<div id="logindisplay"> 
    @{ Html.RenderPartial("_LogOnPartial"); } 
</div> 

_LogOnPartial.cshtml:

@model HOP2013.Models.LogOnModel 

@{ 
    ViewBag.Title = "Log On"; 
} 


@if(Request.IsAuthenticated) { 
<text>Welcome <b>@Context.User.Identity.Name</b>! 
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text> 
    } 
    else { 
     @: @Html.ActionLink("Log On", "LogOn", "Account") 
    } 
      @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.") 

    @using (Html.BeginForm()) { 

    <fieldset> 
     <legend>Account Information</legend> 
     <div id="user" class="user"> 
     <div class="editor-label"> 
      @Html.LabelFor(m => m.UserName) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(m => m.UserName, new { @title = "UserName" }) 
      @Html.ValidationMessageFor(m => m.UserName) 
     </div> 
     </div> 
     <div id="password" class="password"> 
     <div class="editor-label"> 
      @Html.LabelFor(m => m.Password) 
     </div> 
     <div class="editor-field"> 
      @Html.PasswordFor(m => m.Password, new { @title = "UserName" }) 
      @Html.ValidationMessageFor(m => m.Password) 
     </div> 
     <div class="editor-label"> 
      @Html.CheckBoxFor(m => m.RememberMe) 
      @Html.LabelFor(m => m.RememberMe) 
     </div> 
     </div> 

     <p> 
      <input type="submit" class="login" value="Log On" /> 
     </p> 

     <p>New @Html.ActionLink("Register", "SignUp", "Account")Here</p> 
    </fieldset> 

} 

Но я не могу войти. Если я вхожу в систему с отдельной страницей (LogOn.cshtml), значит, она успешно завершена. Я не знаю, почему это происходит. Меня все разъясняют.

ответ

4

Вы должны явно указать действие контроллера в вашей форме:

@using (Html.BeginForm("LogOn", "Account")) { 
    ... 
} 

Причина этого в том, что при использовании Html.BeginForm() помощника без каких-либо параметров используется текущий URL-адрес в качестве действия формы. Но текущий url может быть чем-то совершенно другим, потому что это представление может быть подано с любого контроллера. Если явно указывать действие контроллера, к которому вы хотите отправить форму, помощник будет генерировать правильный атрибут действия:

<form action="/Account/LogOn" method="post"> 
    ... 
</form> 
Смежные вопросы