【问题标题】:Passing a String value through asp-for="..." into a Model in ASP.Net core isn't working the way it should通过 asp-for="..." 将字符串值传递给 ASP.Net 核心中的模型无法正常工作
【发布时间】:2021-04-07 21:22:00
【问题描述】:

所以我尝试通过发送表单来传递密码类型的字符串,所有其他数据都按应有的方式工作,但是当我用 2 个密码尝试相同的事情时,什么也没有发生。

<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Userdata.Username" class="control-label"></label>
                <input asp-for="Userdata.Username" class="form-control" required />
                <span asp-validation-for="Userdata.Username" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Password1" class="control-label">Password</label>
                <input asp-for="Password1" class="form-control" type="password" required />
                <span asp-validation-for="Password1" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Password2" class="control-label">Password</label>
                <input asp-for="Password2" class="form-control" type="password" required />
                <span asp-validation-for="Password2" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Userdata.Role" class="control-label"></label>
                <input asp-for="Userdata.Role" class="form-control" required />
                <span asp-validation-for="Userdata.Role" class="text-danger"></span>
            </div>`
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

上面的代码来自csHTML

      [BindProperty]
        public Userdata Userdata { get; set; }

        public String Password1 { get; set; }
        public String Password2 { get; set; }


        // To protect from overposting attacks, enable the specific properties you want to bind to, for
        // more details, see https://aka.ms/RazorPagesCRUD.
        public async Task<IActionResult> OnPostAsync()
        {

            if (!ModelState.IsValid)
            {
                return Page();
            }

            if (Password1 != Password2)
            {
                errormessage = "Passwords don't Match";
                return null;
            }

上面的代码来自 Model 类,我在其中尝试检查密码是否匹配,但它们一直显示为 Null

【问题讨论】:

  • 您的其他属性也使用模型名称,即“Userdata.Role”,但您的密码只是“Password1”。因此,它没有正确绑定到模型。

标签: c# html asp.net-core asp.net-core-mvc razor-pages


【解决方案1】:

如果您的 Userdata 模型中有两个密码,则需要在前端使用 Userdata.Password1Userdata.Password2

<div class="form-group">
     <label asp-for="Userdata.Password1" class="control-label">Password</label>
     <input asp-for="Userdata.Password1" class="form-control" type="password" required />
     <span asp-validation-for="Userdata.Password1" class="text-danger"></span>
</div>
<div class="form-group">
     <label asp-for="Userdata.Password2" class="control-label">Password</label>
     <input asp-for="Userdata.Password2" class="form-control" type="password" required />
     <span asp-validation-for="Userdata.Password2" class="text-danger"></span>
</div>

如果您只想接收以下属性的数据:

public String Password1 { get; set; }
public String Password2 { get; set; }

您需要在它们上添加[BindProperty] 属性:

[BindProperty]
public String Password1 { get; set; }
[BindProperty]
public String Password2 { get; set; }

结果:

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2021-09-06
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多