如何将多个表单值绑定到一个 属性?
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
属性。因此,在您的表单中,您可以使用 Day
、Month
和 Year
属性,然后当您映射回您的实体时,您将其设置为 Field
属性 到视图模型上的 Field
属性,它会根据发布的内容自动填充自身。
我还建议在这里使用 DateTime 而不是字符串。它不仅使来回转换变得更加容易,而无需进行一堆字符串解析,而且您可以以任何需要的格式表示日期,而不仅仅是字符串的一种静态格式。
我有 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
属性。因此,在您的表单中,您可以使用 Day
、Month
和 Year
属性,然后当您映射回您的实体时,您将其设置为 Field
属性 到视图模型上的 Field
属性,它会根据发布的内容自动填充自身。
我还建议在这里使用 DateTime 而不是字符串。它不仅使来回转换变得更加容易,而无需进行一堆字符串解析,而且您可以以任何需要的格式表示日期,而不仅仅是字符串的一种静态格式。