ASP.net MVC2.Заполненная модель не возвращается к контроллеру - PullRequest
0 голосов
/ 27 октября 2010

Скажем, я ввел 'email@domain.com' и 'пароль' в поля для входа.

Аннотации данных в AuthModel.cs возвращают, что значения не заполняются.Таким образом, данные в html-форме фактически никогда не заполняют модель, которую они выбрасывают.

В своем удивлении я вчера внес много поспешных изменений перед закрытием решения и не тестировал сделанные мной изменения,В результате я не знаю, что я изменил, чтобы сломать это.

Если мне нужно опубликовать что-нибудь еще, дайте мне знать.* AuthModel.cs

public class AuthModel
{
    public Login Login { get; set; }
    public ForgotPassword ForgotPassword { get; set; }
    public Register Register { get; set; }
}

...

public class Login
{
    [Required
        (ErrorMessageResourceName = "Login_Error_HandleRequired",
         ErrorMessageResourceType = typeof(Resources.Auth))]
    [Email(ErrorMessage="Invalid Email")]
    public string Handle { get; set; }
    [Required
        (ErrorMessageResourceName = "Login_Error_PasswordRequired",
         ErrorMessageResourceType = typeof(Resources.Auth))]
    public string Password { get; set; }
    public bool Memory { get; set; }
}

И Index.aspx, который является формой входа в систему.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Templates/FullColumn.Master" Inherits="System.Web.Mvc.ViewPage<FCX.Models.Auth.AuthModel>" %>

...

<% Html.EnableClientValidation(); %>
<%=Html.ValidationSummary() %>
<% using (Html.BeginForm("login", "auth"))
   { %>
<div id="login-block" class="entry-block">
    <h4>
        Sign in</h4>
    <ul>
        <li>
            <label for="Login_Handle">
                Email Address</label><%=Html.TextBoxFor(Model => Model.Login.Handle, new { @class = "txt-input" })%></li>
        <li>
            <label for="Login_Password">
                Password</label><%=Html.PasswordFor(Model => Model.Login.Password, new { @class = "txt-input" })%></li>
        <li>
            <%=Html.CheckBoxFor(Model => Model.Login.Memory, new { @class = "left-input" })%><label
                for="Login_Memory" class="right-label">Keep me logged in</label></li>
        <li>
            <button type="submit" name="Login.Submit" value="1">
                Sign in</button></li>
    </ul>
</div>
<% } %>

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Должны ли эти свойства иметь тип string и bool ?

public class AuthModel
{
    public ->string<- Login { get; set; }
    public ->string<- ForgotPassword { get; set; }
    public ->bool<- Register { get; set; }
}
0 голосов
/ 28 октября 2010

После просмотра этого в течение некоторого времени я выяснил это.

Я давал представление всей модели (включая модели входа в систему, регистрации и забытого пароля), а затем отправлял всю модель (только1 из которых был заселен).И затем, когда контроллер вызывал переданную модель, он искал только одну из моделей внутри более крупной модели.

Изначально я обошел это, передавая только части по частям и возвращаяих правильно.Когда я изменил свой код, я нарушил ранее работавший способ.

Используя примеры выше.Что мне нужно было изменить, так это аргумент для Login () использовать всю модель, которая использовалась представлением.

...

using FCX.Models.Auth;

...

// GET: /auth/login
[HttpPost]
public ActionResult Login(AuthModel model)
{
    if (ModelState.IsValid)
    {
        Login loginData = model.Login;

        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...