在我的数据库结构中,我有一个特定用户的字段数组。像...
User: Choice1, Choice2, Choice3, Choice4, etc.
当View发布到控制器时,将进入这些字段的值将从动态构造的一组隐藏输入中以字符串数组(MyChoices[]
)传递。
我的好主意是使用for
循环遍历数组并分配值。所以,像:
for (int x = 0; x < MyChoices.Count(); x++ {
model.Choice[x + 1] = MyChoices[x];
}
但是,我没有运气弄清楚如何从模型中动态获取字段名称,以便我可以分配它们。
基本上我正在寻找类似的东西:model.GetField("Choice" + x + 1)
有没有办法做到这一点?我正在考虑改革我的数据结构,以便不是列出Choice1,Choice2,Choice3等,而是只有一个Choices表,其中列出了User,ChoiceID,ChoiceValue。但是,我真的不想重构我的数据,因为我有另一个页面,它实际上放在一个表格中。有没有办法做到这一点,或者我只是打破了每个数据库/开发人员的诫命?
我知道这是一个相当“你怎么做”的类型问题,但我一直在寻找并且还没有真正找到解决方案......我实际上是在寻找C#语法,所以我认为它资格。
这是Model类:
public partial class UserChoice
{
public int UserChoiceID { get; set; }
public Nullable<int> UserID { get; set; }
public string User { get; set; }
public string Choice1 { get; set; }
public string Choice2 { get; set; }
public string Choice3 { get; set; }
public string Choice4 { get; set; }
public string Choice5 { get; set; }
public string Choice6 { get; set; }
public string Choice7 { get; set; }
public string Choice8 { get; set; }
public string Choice9 { get; set; }
public string Choice10 { get; set; }
public string Choice11 { get; set; }
public string Choice12 { get; set; }
public string Choice13 { get; set; }
public string Choice14 { get; set; }
public string Choice15 { get; set; }
public string Choice16 { get; set; }
}
答案 0 :(得分:1)
如果您不知道哪些字段或属性应该使用反射
样品:
FieldInfo[] myField = myType.GetFields();
for(int i = 0; i < myField.Length; i++)
{
Console.WriteLine(myField[i].Name);
}
答案 1 :(得分:0)
如果您想动态或在运行时获取属性名称,则应使用System.Reflection,甚至可以获取或设置其值
答案 2 :(得分:0)
好的,这就是我做的方式:
首先,哈特福德的帽子......我的意思是,@ Thorarins,因为他几乎把我引向了正确的方向。从本质上讲,我能够通过以下方式完成我的任务:
for (int x = 0; x < MyChoices.Count(); x++)
{
td.GetType().GetProperties().Single(p => p.Name == "Choice" + (x + 1)).SetValue(td, MyChoices[x]);
}
我的最终解决方案似乎有点笨拙和不自然。所以,如果有人有任何好的想法如何让它变得更好,我会全力以赴。