0

ログイン ボタンをクリックしても、モデルがサーバーに投稿されません。ただし、FormCollection を受け入れると、値が表示されます。フォーム コレクションを検索する代わりに、これをモデルに自動的にバインドするにはどうすればよいですか?

私が読んだことから、これにはいくつかの一般的な問題があります:
1 - あなたのビューはあなたが使用しているモデルを指定していません (@model myApp.Models.name)
2 - あなたのモデルはプロパティを使用していません
3 - 必須フィールドのいずれか行方不明

コントローラ

[HttpGet]
public ActionResult Password()
{
    return View(new AuthViewModel());
}

[HttpPost]
public ActionResult Password(AuthViewModel password)
{
    if (password == null || string.IsNullOrEmpty(password.Password))
    {
        ViewBag.Error = Constants.ErrorMessages.UserPassword_PassBlank;
        return View(new AuthViewModel());
    }

    //success
    return Redirect("/");
}

モデル

public class AuthViewModel
{
    public string Password { get; set; }
}

意見

@model MvcApplication1.Models.AuthViewModel
@{
    ViewBag.Title = "Password";
}

<h2>Password</h2>
@using (Html.BeginForm())
{
    <div>@Html.TextBoxFor(m => m.Password,new{placeholder="Password",type="password",autofocus=""})</div>
    <div><button id="btnLogin" type="submit">Login</button></div>
    <div class="error">@ViewBag.Error</div>
}
4

2 に答える 2

0

以下を使用します

    @using (Html.BeginForm())
{
    <div>@Html.PasswordFor(model => model.Password)</div>
    <div><input id="btnLogin" type="submit" value="Login"/></div>
    <div class="error">@ViewBag.Error</div>
}
于 2013-04-19T21:52:12.650 に答える
0

試してみないとダンの答えがうまくいかない理由がわかりません。あなたのようなログインフォームのコードをいくつか見てみました。これが私のものです:

public class SignInModel
{
    [Required]
    [Display(Name = "Enter your email address")]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Enter your password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

私が見る主な違いは、パスワードに [DataType(DataType.Password)] 属性があることです。ただし、これがそれほど違いを生むかどうかはわかりません。

私が気付いたもう 1 つの違いは、私のフォームでは、フォーム メソッドが POST であることを指定していることです。またEditorFor()、テキストボックスやパスワードの代わりにヘルパーを使用しました:

@using (Html.BeginForm("SignIn", "Account", "POST"))
{
    <div class="form-field">
        @Html.LabelFor(x => x.Email)
        @Html.EditorFor(m => m.Email)
    </div>
    <div class="form-field">
        @Html.LabelFor(x => x.Password)
        @Html.EditorFor(m => m.Password)
    </div>
    <div class="form-remember">
        @Html.CheckBoxFor(m => m.RememberMe)
        @Html.LabelFor(x => x.RememberMe)
    </div>
    <button type="submit">
        Sign In</button>
}
于 2013-04-19T22:15:37.590 に答える