使用包含对象的模型创建表单。 他们中的大多数都有一个Id字段。
如果您使用@ Html.HiddenFor()来显示这些字段 它们都与Id相同。
我们尝试使用@ Html.Hidden()并提供一个唯一的名称 作为“ApplicantId”或“AddressId”。但随后是Id属性 模型返回控制器时未设置。
所以问题是如何在自定义中使用@ Html.Hidden() 在提交时命名并使它们映射回正确的字段 形式?
public class PersonView {
public long Id { get; set; }
}
我们想用
@Html.Hidden( "ApplicantId", Model.Id)
但是当它返回到控制器时,框架不会将ApplicantId表单字段映射到PersonView.Id字段。
这是有道理的,因为名称ApplicantId与PersonView对象上的任何属性都不匹配。 是否可能有一个属性来装饰PersonView.Id属性以指示更独特的名称?
答案 0 :(得分:2)
如果您使用@ Html.HiddenFor()来显示这些字段,那么它们都是 与Id名称相同。
您遇到的问题应该与其他问题有关。
如果您有一个具有多个属性的ViewModel,则每个属性都是一个具有名为“Id”的属性的对象,当您使用帮助程序将其放置在表单中时(至少在XXXFor()形式中)输入ID变为:“{{ 1}}“和”YourPropertyName_Id
“。
当您发布复杂模型(包含其他模型作为属性的模型)时,您需要在viewmodel中的无参数构造函数中实现属性。模型绑定器将调用它,然后填充其属性。 这可能是未在帖子上收到ID的原因。
您输入的ID可以覆盖您在Javascript中需要使用的内容...但它不用于进行模型绑定,框架使用YourOtherPropertyName_Id
属性,而不是{{ 1}}(顺便说一句,name
属性的形成类似于id
,但name
代替id
,所以它的结尾类似于.
)