如何将多个表单值绑定到一个 属性?

How can I bind multiple form values into one property?

我有 3 个输入名称:Field_Day、Field_Month、Field_Year。

还有一个看起来像这样的模型:

public class Model
{
  public string Field { get; set; }
}

如何将这 3 个表单值绑定到我的字段 属性(“10.10.2015”)?

编辑:

大多数答案建议更改我的视图模型。这是不可能的,因为我的模型是元模型。

public class MetaModel
{
  public string[] FieldValues { get; set; } // Select Multiple inputs can have more than one value
  public string ControlType { get; set; }
  ...
}

您将要制作另一个 class,然后使用剃刀助手或手动相应地命名您的输入元素

c#

public class ViewModel
{
 public Field Field { get; set; }
}

public class Field
{
 public string Day { get; set; }
 public string Month{ get; set; }
 public string Year{ get; set; }
} 

.cshtml

@model ViewModel

<form>
 <div>Field Day <input name="Field.Day" /></div>
 <div>Field Month <input name="Field.Month" /></div>
 <div>Field Year <input name="Field.Year" /></div>
</form>

name 属性是 asp.netmvc 模型绑定器用来填充视图模型的属性。这就是为什么他们在那里有点扩展。

我倾向于在视图模型中执行如下操作:

public int Day { get; set; }
public int Month { get; set; }
public int Year { get; set; }

public DateTime Field
{
    get { return new DateTime(Year, Month, Day); }
    set
    {
        Day = value.Day;
        Month = value.Month;
        Year = value.Year;
    }
}

此代表的实体将只有 Field 属性。因此,在您的表单中,您可以使用 DayMonthYear 属性,然后当您映射回您的实体时,您将其设置为 Field 属性 到视图模型上的 Field 属性,它会根据发布的内容自动填充自身。

我还建议在这里使用 DateTime 而不是字符串。它不仅使来回转换变得更加容易,而无需进行一堆字符串解析,而且您可以以任何需要的格式表示日期,而不仅仅是字符串的一种静态格式。