0

こんにちは、.NET MVC 3 を初めて使用します

ログインしたユーザーのパスワードを変更するコントローラーがあります。

public ActionResult ChangeUserPassword(string userId)
{
    ChangePasswordModel model = new ChangePasswordModel() { Id = userId };
    return View(model);
}

[HttpPost]
public ActionResult ChangeUserPassword(ChangePasswordModel model)
{
    if (ModelState.IsValid)
    {
        // ChangePassword will throw an exception rather
        // than return false in certain failure scenarios.
        bool changePasswordSucceeded = true;
        try
        {
            changePasswordSucceeded = userDetailsService.ChangeUserPassword(model.Id, model.OldPassword, model.NewPassword);
        }
        catch (Exception)
        {
            changePasswordSucceeded = false;
        }

        if (changePasswordSucceeded)
        {
            return View("ChangePasswordSuccess");
        }
        else
        {
            ViewBag.Message = "The current password is incorrect or the new password is invalid.";
            ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
        }
    }
    // If we got this far, something failed, redisplay form
    return View();
}

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

ビューは次のとおりです。

@model MVCApp.Models.ChangePasswordModel

@{
    ViewBag.Title = "Change User Password";
}

<h2>Change User Password</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Change Password</legend>

        @Html.HiddenFor(model => model.Id)

        <div class="editor-label">
            @Html.LabelFor(model => model.OldPassword)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.OldPassword)
            @Html.ValidationMessageFor(model => model.OldPassword)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.NewPassword)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.NewPassword)
            @Html.ValidationMessageFor(model => model.NewPassword)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ConfirmPassword)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ConfirmPassword)
            @Html.ValidationMessageFor(model => model.ConfirmPassword)
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

[保存] ボタンをクリックしても、何も起こりません。私が何か間違ったことをしている場合、またはエラーをキャッチして表示する方法を教えてもらえますか?

編集:フォームを送信しても、デバッガーはエラーを検出しません

編集:(関連性がないため、写真は削除されました)

コントローラーを変更しました:

if (changePasswordSucceeded)
                {
                    return View("ChangePasswordSuccess");
                }
                else
                {
                    return View("ChangePasswordFailed");
                }

しかし、それは私をどこにもリダイレクトしません...何が起こるのか本当にわかりません

編集:モデルは空だと思います

4

5 に答える 5

1

Firefox がそれを行っている可能性があると思われる場合 (そのダイアログ ポップアップ)、Chrome を使用してみてください。Chrome でデバッグしようとしているページに移動し、[送信] を押す前に F12 を押して開発者ツールを表示し、[ネットワーク] タブに切り替えます。その後、ページへのスイッチ パックを開いて [送信] をクリックし、サーバーに接続しようとするエントリがそこにあることを確認します。その場合、サーバー上のアクションで問題をデバッグできます。[ネットワーク] タブに何も表示されない場合は、クライアント側の検証で有効ではないと判断され、サーバーへの送信が妨げられている可能性があります。

于 2013-02-04T16:53:51.257 に答える
1

BeginForm でアクションとコントロールについて言及します。

@Html.BeginForm("action","controller", FormMethod.Post);
于 2013-02-04T16:06:47.607 に答える
1

modelモデルエラーが発生した場合に備えて、コントローラーアクションで as オーバーロードを View に渡しません。

If(ModelState.IsValid)
{
     //your code
}
else
{
    return View(model);//You did not pass this 
}

また、あなたのビューでは、失敗したViewBag.Messageかどうかを確認することchangePasswordSucceededはありませんでした。あなたが言ったように、コントローラーは失敗する可能性があるものを何も表示しません。

ビューで使用@ViewBag.Messageして、エラーがあるかどうかを確認する必要があります。

于 2013-02-04T17:04:40.823 に答える
0

トライを外します。何かが壊れていないか確認してください。

于 2013-02-04T17:12:25.193 に答える
0

問題が見つかったので、私は自分の質問に答えます。コードは正しく、問題は適切なUserIdをコントローラーに送信していないアクション リンクにありました。

Viewに渡すことで問題が見つかったViewBag.Message = UserIdので、空であることに気付きました。修理済み

于 2013-02-04T18:48:39.390 に答える