2016-07-25 14 views
1

nicht sicher, wie dies zu Wort ...Dynamische Modelleigenschaften, erhalten Modelleigenschaft nach Name

ich ein Modell haben, hier ist ein Teil davon:

public class AnswerSheet 
    { 

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

Ich bin mit einem Viewmodel Verwenden Sie dieselbe Ansicht, um jede Frage einzeln zu beantworten. Es funktioniert fast. Gibt es eine Art, wie ich mein Controller verwenden kann wie folgt dynamisch die model.q #, ex zuzuweisen:

[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(); 

So kann im Grunde ich Daten von meinem Controller Variable (qCounter in diesem Fall) und weisen Sie ihn mein Modell wie Model.Q (qcounter)

Als eine Randnotiz bin ich offen für Vorschläge, wie diese Frage oder welche Tags zugeordnet werden.

+3

Es klingt wie Ihr Modell für 'AnswerSheet' sollte wirklich eine' Liste haben Fragen { bekommen; einstellen; } ' –

+0

Bitte beachten Sie, dass das Modell-View-Controller-Tag für Fragen über das Muster ist. Es gibt ein bestimmtes Tag für die ASP.NET-MVC-Implementierung. –

+0

Jon Skeet, die Sache ist, ich möchte, dass meine Daten in eine Datenbank von AnswerSheets zurückgehen, wo jeder Datensatz Spalten für jede Frage hat (Q1, Q2, Q3, usw.). Gibt es noch eine Möglichkeit, mein Modell an eine Liste zu binden, aber die Daten so in der Datenbank speichern? Ich benutze zuerst den EF6-Code. – dave317

Antwort

0

fand ich diesen Beitrag nützlich:

Set object property using reflection

Dies ist, was ich tun endete, noch Leistung testen:

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(); 

Vielleicht, dass jemand auf der ganzen Linie helfen .. ..Nicht sicher, ob dies mit Reflektion zu tun hat ...