当我将它从视图传递到控制器时,为什么我的代码字符串会被裁剪?

Why my string with code is cropped up when I pass it from view to controller?

我已重置密码令牌:

 string resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user);

在我从电子邮件 link 重置密码后,我将此令牌和电子邮件传递给查看:

  [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

您缺少 " 属性值。

这个:

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

应该是这样的:

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

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

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