ASP.NET MVC Core表单提交至Test类参数为空:表单需修改何处?
表单值无法绑定到Test类的解决办法
你遇到的问题是因为ASP.NET Core的模型绑定规则和当前表单字段的命名不匹配导致的,只需要修改表单里输入框的name属性就能解决,具体修改如下:
修改后的表单代码
<form method="post" id="modalForm" action="/Test/TestForm" target="myframe"> <input type="text" name="test.id" required /> <input type="text" name="test.name" required /> <input type="submit" value="Post" /> </form>
为什么这样改?
ASP.NET Core默认的模型绑定器会按照「参数名 + 类成员名」的层级关系来匹配表单数据。你的后端接收参数是Test test,所以表单输入框的name必须改成test.id和test.name,这样绑定器才能准确把用户输入的值映射到test对象的id、name字段上。
另外提个小细节:你原来把onsubmit事件写在了<input type="submit">标签上,这是错误的写法——onsubmit事件应该绑定在<form>标签上才会触发,我已经帮你调整掉了这个问题。
额外的优化建议(如果允许修改后端)
虽然你要求只修改表单,但如果能调整后端的Test类,把公共字段改成公共属性的话,表单的name就可以保持原来的id和name,代码会更简洁规范:
public class Test { public string Id { get; set; } public string Name { get; set; } }
这是因为ASP.NET Core的模型绑定优先支持公共属性,这种写法也更符合.NET的编码规范,后续维护起来也更方便。
内容的提问来源于stack exchange,提问作者ProgrammingAsk
相关产品推荐
相关产品推荐

