我有3个输入名称:Field_Day,Field_Month,Field_Year。
一个看起来像这样的模型:
public class Model
{
public string Field { get; set; }
}
如何将这3个表单值绑定到我的Field属性中(" 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; }
...
}
答案 0 :(得分:2)
我倾向于在视图模型中执行以下操作:
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
属性设置为{视图模型上的{1}}属性,它会根据发布的内容自动填充。
我还建议在这里使用DateTime而不是字符串。它不仅可以使来回转换变得更加容易,而且无需进行大量的字符串解析,但是您可以以任何需要的格式表示日期,而不仅仅是字符串的一种静态格式。
答案 1 :(得分:1)
您将要创建另一个类,然后使用剃刀助手或手动命名您的输入元素
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.net mvc模型绑定器用于填充视图模型的内容。这就是为什么他们在那里有点扩展。