用于重复表单字段名称的MVC4解决方案

时间:2014-01-02 20:41:06

标签: .net asp.net-mvc-4

使用包含对象的模型创建表单。 他们中的大多数都有一个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属性以指示更独特的名称?

1 个答案:

答案 0 :(得分:2)

  

如果您使用@ Html.HiddenFor()来显示这些字段,那么它们都是   与Id名称相同。

您遇到的问题应该与其他问题有关。 如果您有一个具有多个属性的ViewModel,则每个属性都是一个具有名为“Id”的属性的对象,当您使用帮助程序将其放置在表单中时(至少在XXXFor()形式中)输入ID变为:“{{ 1}}“和”YourPropertyName_Id“。

当您发布复杂模型(包含其他模型作为属性的模型)时,您需要在viewmodel中的无参数构造函数中实现属性。模型绑定器将调用它,然后填充其属性。 这可能是未在帖子上收到ID的原因。

您输入的ID可以覆盖您在Javascript中需要使用的内容...但它不用于进行模型绑定,框架使用YourOtherPropertyName_Id属性,而不是{{ 1}}(顺便说一句,name属性的形成类似于id,但name代替id,所以它的结尾类似于.