我应该在哪里放置我的部分视图

时间:2016-11-04 21:15:38

标签: asp.net-mvc

我的项目有重置密码功能。我正在使用令牌向用户发送链接。点击链接后,我需要进入HomeController并启动ResetPassword方法。我的问题是我不知道在哪里放置ResetPassword部分视图(即模态),无论我把它放在哪里,它都会在我打开登录页面时引入。

在用户电子邮件中考虑此链接:

http://...myurlaction=resetpassword&userid=5&email=test@yahoo.com&token=1234564

当他们点击它时我需要采用这种方法:

首先得到方法:

[HttpGet]
[Route("resetpassword")]
[AllowAnonymous]
public ActionResult ResetPassword(ResetPasswordRequest resetPasswordRequest)
{
    //check if Token is valid show the view
    return PartialView();
}

发帖后,转到POST方法:

[HttpPost]
[Route("resetpassword")]
public ActionResult ResetPassword(ResetPasswordView resetPasswordView)
{
    return PartialView();
}

这是部分观点:

<div id="myModal" class="modal">
<div class="modal-content">
    <span class="close">x</span>
    @using (Html.BeginForm("resetpassword", "Home", FormMethod.Post))
    {
        <h5>Reset Your Loan Center Password</h5>
        <table>
            <tr><td>Email Address</td><td><input type="email" name="Email" placeholder="jdoe@example.com"></td></tr>
            <tr><td>Password</td><td><input type="Password" name="Password" placeholder="Create Password"></td></tr>
            <tr><td>Confirm Password</td><td><input type="Password" name="ConfirmPassword" placeholder="Re-enter Password"></td></tr>
            <tr><td colspan="2"><input type="submit" value="Reset Password"></td></tr>
            <tr>
                <td class="errMessage" colspan="2">
                    @Html.ValidationSummary(true)
                </td>
            </tr>
        </table>
    }
</div>

我的问题是,我不知道我必须拥有@Html.Partial("Login")的位置 因为我所拥有的任何地方都显示重置密码视图,即使我不需要显示它。

2 个答案:

答案 0 :(得分:1)

根据您的说明,我猜您使用PartialView因为您想重复使用Login页面的代码。基本上,您的Login页面有两种状态:一种用于登录,另一种用于重置密码。要知道哪个州已被激活,您应该在Login页面中添加一个标记,例如:

@if (Viewbag["state"] == "Login") {
    Html.RenderPartial("Login");
} else {
    Html.RenderPartial("resetpassword");
}

然后,您要做的是在ViewbagLoginController上设置ResetPasswordController的相应值,如下所示:

[HttpGet]
[Route("resetpassword")]
[AllowAnonymous]
public ActionResult ResetPassword(ResetPasswordRequest resetPasswordRequest)
{
    //check if Token is valid show the view
    Viewbag["state"] = "ResetPassword";
    return YourLoginPage();
}

答案 1 :(得分:0)

如果我正确理解了您的问题,则部分视图应位于应用程序的Views \ Home文件夹中,因为您从主控制器调用部分视图。作为建议,也许您可​​以将您的操作方法移动到帐户控制器,严格来说,重置密码更像是一个&#34;帐户&#34;功能而不是驻留在家庭控制器中的功能。在这种情况下,您的部分视图将添加到Views \ Account。