- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个登录页面,在页面模型中有一个名为 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
。
引用:
然后你需要知道 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/
我是一名优秀的程序员,十分优秀!