当我将字符串从视图传递到控制器时,为什么会出现带有代码的字符串?

时间:2018-10-18 08:40:44

标签: c# asp.net asp.net-core-mvc asp.net-identity

我已重置密码令牌:

 string resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user);

我要通过电子邮件链接重置密码后,我会传递此令牌和电子邮件以查看:

  [HttpGet]
    public IActionResult ResetPassword([FromQuery] string token, string email)
    {
        var model = new ResetPasswordViewModel
        {
            Email = email,
            Token = token
        };
        return View(model);
    }

问题是当我尝试将此令牌从视图传递到控制器时,令牌在符号+或“”之前被裁剪。 我的看法:

<form 
          method="post" action="reset">
        <input name="Email" type="hidden" value=@Model.Email>
        <input name="Token" type="hidden" value=@Model.Token/>
        <div class="form-group">
            <label name="NewPassword" class="control-label">New Password</label>
            <input name="NewPassword" class="form-control" />

        </div>
        <div class="form-group">
            <label name="ConfirmNewPassword" class="control-label">Confirm New Password</label>
            <input name="ConfirmNewPassword" class="form-control" />
        </div>

        <div class="form-group">
            <input type="submit" value="Save" class="btn btn-success" />
        </div>
    </form>

POST:

[HttpPost]
  [Route("reset")]
    public async Task<IActionResult> ResetPassword(ResetPasswordViewModel model)
    {
        if (!ModelState.IsValid)
            return View(model);

        var user = await _userManager.FindByEmailAsync(model.Email);
        if (user == null)
            return RedirectToAction("ResetPasswordConfirm");

        var result = await _userManager.ResetPasswordAsync(
            user, model.Token, model.NewPassword);
        if (result.Succeeded)
            return RedirectToAction("ResetPasswordConfirm");

        foreach (var error in result.Errors)
            ModelState.AddModelError(string.Empty, error.Description);

        return View(model);
    }

令牌:

CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe+VMzEQna/oNfdB9G3NWxq05wnuLfERKVFiMXMaodDsMV9G6b+J7fJCv8i1QmzR6X/vg/fDNkhmm37m1rJf0TZ41LEiBgthYS9RC/Cg785SaBN0O3VbO+nW/9WRZU1DzIU/ik2/CgkW1gqu9/FszQxVy0GtC

裁剪后的令牌:

CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe

1 个答案:

答案 0 :(得分:2)

您在属性值周围缺少"

此:

<input name="Token" type="hidden" value=@Model.Token/>

应该是这样

<input name="Token" type="hidden" value="@Model.Token"/>

但是,您应该真正考虑使用标记帮助程序,而不是手动创建属性值,这样就不必担心HTML编码,例如:

<input type="hidden" asp-for="Token" />