gpt4 book ai didi

asp.net-core - ASP.Net Core Razor Pages 应用程序未绑定(bind)到模型中的属性

转载 作者:行者123 更新时间:2023-12-05 05:00:03 24 4
gpt4 key购买 nike

我有一个登录页面,在页面模型中有一个名为 LoginDTO 的属性(我的自定义类)。其中只有两个字符串 - 用户名和密码。

在登录页面上,我有一个包含两个字段的登录表单,您大概可以猜到它们是什么。代码在这里:

<div class="form-group">
<input class="form-control" type="email" name="email" placeholder="Email" asp-for="LoginDTO.Username">
</div>
<div class="form-group">
<input class="form-control" type="password" name="password" placeholder="Password" asp-for="LoginDTO.Password">
</div>

我填写输入字段并点击提交(表单方法设置为 POST,我在页面模型中有一个 OnPost 方法来处理它),出于某种原因LoginDTO.Username 为空,但 LoginDTO.Password 已填充?因此,当然,ModelState 是无效的,并且没有可用的 Username 字符串。

这怎么可能?我尝试重命名变量并将其设置为 value="@Model.LoginDTO.Username" 而不是使用 asp-for,两者都没有任何区别。

有人能帮忙吗?

更新:我将 Username 属性更改为 Email,它现在开始工作了吗?!为什么这些属性的名称会影响它们是否可以赋值?!?!

最佳答案

I changed the Username property to Email and it's now started working?! Why do the name of these properties affect if they can be assigned values?!?!

首先,您需要知道对于复杂类型的每个属性,模型绑定(bind)会在源中查找名称模式 prefix.property_name。如果未找到任何内容,它只查找不带前缀的 property_name

引用:

https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.1#complex-types

然后你需要知道 asp-for 标签助手会默认生成如下 html:

<input id="LoginDTO_Username" name="LoginDTO.Username">

但是您将 name 属性添加到 input 元素,因此它会覆盖 name 属性,它会呈现如下 html:

<input id="LoginDTO_Username" name="email">

所以模型绑定(bind)系统无法找到username源。这就是为什么将Username属性更改为Email后它可以工作的原因.

对于您的场景,如果您不想更改模型属性名称,您可以像下面这样更改:

<input class="form-control" type="email" name="username" placeholder="Email" asp-for="LoginDTO.Username">

或者只使用 asp-for 标签助手:

<div class="form-group">
<input class="form-control" type="email" placeholder="Email" asp-for="LoginDTO.Username">
</div>
<div class="form-group">
<input class="form-control" type="password" placeholder="Password" asp-for="LoginDTO.Password">
</div>

关于asp.net-core - ASP.Net Core Razor Pages 应用程序未绑定(bind)到模型中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63293256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com