1

URLで渡すパラメーターがあります。ユーザーが URL をクリックすると、追加情報を入力できるサイトに移動します。(パスワードのリセット) URL の一部として渡すトークンを取得し、別のコントローラーに送信するモデルに配置する必要があります。このコントローラーは、トークンとパスワードを検証し、検証された場合はパスワードをリセットします。モデルで渡されたパラメーターを取得する方法がわかりません。

私のコントローラー:

[AllowAnonymous]
public ActionResult TokenPasswordReset(string token)
{
   return View();
}

私が生成する私のURLは

http://localhost:53272/Account/TokenPasswordReset?wzBXjkT1Y8qmWIECwSIFYQ2

私の見解では、非表示のモデル値を設定しようとしています。

<fieldset>
        <legend>Reset Password Form</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.NewPassword)
                @Html.PasswordFor(m => m.NewPassword)
            </li>
            <li>
                @Html.LabelFor(m => m.ConfirmPassword)
                @Html.PasswordFor(m => m.ConfirmPassword)
            </li>
        </ol>
        @Html.HiddenFor(model.UserToken = Request.Params["token"])
        <input type="submit" value="TokenPasswordReset" />
    </fieldset>

パスワードと確認パスワードは問題ありません。URLからトークンを引き出してmodel.UserTokenに入れる方法がわかりません。これを行うと、次のエラーが表示されます

「モデル」という名前は現在のコンテキストには存在しません

編集: 以下に示すようにモデルに変更すると、新しいエラーが発生します。何らかの理由で、HiddenFor でモデルを取得しません。

4

3 に答える 3

2

詳細: ViewDataにトークンを追加して、Viewでトークンにアクセスできるようにします。

解決:

コントローラ内

[AllowAnonymous]
public ActionResult TokenPasswordReset(string token)
{
   ViewData["Token"] = token;

   return View();
}

あなたの見解では

@Html.Hidden("Token", ViewData["Token"])

問題を完了するために更新されました

あなたのPostメソッドで

[HttpPost]
public ActionResult TokenPasswordReset(YourModel yourModel, string Token)
{
   yourModel.Token = Token;
   rest of your code....
}
于 2012-10-17T22:08:45.090 に答える
2

Modelはありませんmodel

ただし、それでもうまくいきません。URL にトークン クエリ文字列がないことに気付きましたか? ?token=意味不明ではなく、ただの意味不明です。

また、モデル アイテムとして渡したい場合は、そのモデルを作成する必要があります。

public class TokenModel {
    public string Token {get;set;}
}

次に、コントローラーで:

return View(new TokenModel() { Token = token });
于 2012-10-17T23:48:41.690 に答える
1

@Mystere Man と @MVCKarl に感謝します。私は彼らの回答の構成要素を取り、私の問題を解決することができました. MVCKarls ソリューションは機能するようですが、ViewData を使用したくありませんでした。私が生成したURLはこれです。

http://localhost:53272/Account/TokenPasswordReset?Token=LW6lnVrdUXemBMYqluAbMA2

私の見解では、隠しフィールドをこれに変更しました。

@Html.Hidden("UserToken", Request.Params["token"])

これにより、モデルのみが渡された状態でコントローラーに送信でき、モデルを検証するだけで済みます。

再度、感謝します...

于 2012-10-18T20:11:26.897 に答える