动态模型属性,按名称

时间:2016-07-25 20:28:42

标签: c# asp.net

不确定怎么说这个......

我有一个模型,这是它的一部分:

public class AnswerSheet
    {

public string Q1 { get; set; }
public string Q2 { get; set; }
public string Q3 { get; set; }
public string Q4 { get; set; }

我正在使用Viewmodel重复使用相同的视图来分别回答每个问题。它几乎可以工作。有没有办法可以使用我的控制器如下动态分配model.q#,例如:

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult CreateNextQ([Bind(Include = "ID, qCounter, Question,Comment")] AnswerSheetCreateVM answerVM)
        {
            if (ModelState.IsValid)
            {
                string questionAns = answerVM.Question + answerVM.Comment;
                AnswerSheet answer= db.AnswerSheets.Find(answerVM.ID);


//THIS PART HERE IS WHERE I HAVE A PROBLEM
                answer.Q(answerVM.qCounter) = questionAns;
//That one line above
                db.AnswerSheets.Add(answer);
                db.SaveChanges();

所以基本上我可以从我的控制器变量(在这种情况下为qCounter)中获取数据并将其分配给我的模型,如Model.Q(qcounter)

作为旁注,我愿意就如何说出这个问题或分配给它的标签提出建议。

1 个答案:

答案 0 :(得分:0)

我觉得这篇文章很有用:

Set object property using reflection

这就是我最终要做的,仍然需要测试性能:

string test = string.Format("Q" + answerVM.qCounter);                    
                string questionAns = (answerVM.Question + " - " + answerVM.NoComment);

                AnswerSheet answer= db.AnswerSheets.Find(answerVM.ID);
                if (answer== null)
                {
                    return HttpNotFound();
                }                
                answer.GetType().GetProperty(test).SetValue(answer, questionAns, null);
db.Entry(answer).State = EntityState.Modified;
                db.SaveChanges();

也许这会帮助某些人下线....不确定这是否算作反射......