2016-04-28 5 views
-1

Ich brauche einige Gruppen von RadioButton s in meiner Umfrage zu erstellen. Damit sie in getrennten Gruppen sind, erstelle ich Namen, während ich foreach-Anweisungen durchführe. Alle haben den gleichen Anfangsbuchstaben. Es ist mein CodeWie Liste der Argumente mit nicht statischen Namen anp.net.mvc-5 C#

@foreach (var answer in Model.PossibleAnswers) 
{ 
    <div class="col-xs-2"> 
    @Html.RadioButtonMatrix(answer.IdAspect.ToString(), answer.IdAspect) 
    </div> 
} 

Und es ist meine Methode von benutzerdefinierten Html Helper

public static HtmlString RadioButtonMatrix(this HtmlHelper helper, 
              string target, 
              int value) 
{ 
    StringBuilder sb = new StringBuilder("SelectedValue."); 
    sb.Append(target); 

    string radioButton = 
     String.Format("<input name=\"" + sb + "\" type=\"radio\" value=\"{0}\"/>", value); 

    return new HtmlString(radioButton); 
} 

So ist es möglich, einen nicht statischen Namen parametrs in Methode der Steuerung zu schaffen? fand ich solches Attribut aber vermute, das ist nicht, dass ich

[HttpPost] 
public void GetAnswersMatrix([Bind(Prefix="SelectedValue")]List<String> selectedValues) 
{ 
} 

Vielen Dank für Ihre Hilfe benötigen!

+0

Ihr Gesamt-Endziel und Argumentation ist ein bisschen unklar, aber wenn ich Sie wäre, würde ich wahrscheinlich die 'RadioButton' Sammlung in einem neuen Klassenobjekt namens' RadioButtonGroup', Sie können ihm dann eine Namenseigenschaft geben und es wird machen Ihre Datenstruktur ist viel einfacher zu verwalten und zu iterieren. Vor allem, wenn die "Gruppe" eigentlich nur eine Frage und mögliche Antworten umschließt, würde ein Klassenobjekt diese VIELE sauberer und einfacher zu codieren machen. – Wobbles

+0

Ich sehe auch wenig Punkt in '[Bind (Prefix =" SelectedValue ")]' Sie müssen nur binden, wenn Sie ein Objekt mit Eigenschaften haben, die der Modellbinder absichtlich ignorieren soll. Da Sie nur 1 Objekt haben, möchten Sie immer daran binden. –

+0

@Wobbles Ich habe schon solche "Gruppe" - "CertainAnswer". Es ist ein Modell für die erste demonstrierte Sicht. Es hat 'IdAspect' und' List '. Aber wie hilft es mir, verschiedene Gruppen von 'RadioButtons' zu erstellen und' selectedValues' als Sammlung an den Controller zu senden? –

Antwort

1

Ich schlage vor, die folgende Datenstruktur um Ihnen zu helfen ein bisschen mehr:

class QuizModel 
{ 
    public string HowMuchDoYouLikeCSharp {get;set;} 
    public string HowMuchDoYouLikeCPlusPlus {get;set;} 
} 

public class QuizQuestion 
{ 
    public string Question { get; set; } 
    public string QuestionModelProp {get;set;} //This must match a prop name in the QuizModel 
    public List<string> PossibleAnswers { get; set; } 

    public string generateHTML() 
    { 
     StringBuilder ret = new StringBuilder(); 
     ret.Append("<div>"+Question+"</div>"); 
     foreach (string answer in PossibleAnswers) 
     { 
      ret.Append(String.Format(@"<input name='{0}' type='radio' value='{1}'/>{1}<br/>", QuestionModelProp, answer)); 
     } 

     return ret.ToString(); 
    } 
} 

[HttpPost] 
public ActionResult SubmitAction(QuizModel quizData) 
{  
    string HowMuchDoYouLikeCSharp = quizData.HowMuchDoYouLikeCSharp; 
    string HowMuchDoYouLikeCPlusPlus = quizData.HowMuchDoYouLikeCPlusPlus; 
} 

Sie etwas ändern müssen, um Ihre Bedürfnisse anzupassen, aber das sollten Ihnen einen guten Schrittpunkt geben, selbst eingeschlossen eine rudimentäre Antwort Randomizer. Um es sicher zu halten, ist es am besten, die Formwerte von Antworten und Fragen als Hashes oder Guids zu behandeln, anstatt die Literalstrings, aber das ist ein Problem für eine andere Frage.

Beachten Sie insbesondere, dass die Frage und die Antworten in der gleichen Klasse enthalten sind. Daher ist es einfach, die Funkgruppe basierend auf der Frage zur Antwortiteration zu erstellen.

EDIT: Modifiziert den Code, um näher an Ihren Bedürfnissen zu sein, auch ein Modell als Beispiel enthalten.

+0

Vielen Dank für den Rat, aber ich verstehe immer noch nicht, wie bekommen Sie rhe richtig Antworten (ausgewählte 'RadioButton's) in Ihrem Controller? Könntest du es zeigen? Ich habe ein Problem, weil die Namen von 'RadioButtons' nicht die gleichen sind wie ich sehe. –

+0

Der Datenstring, den Sie in Post bekommen, sollte '? Question1 = Answer1 & Question2 = Answer2' sein, wobei" QuestionN "und" AnswerN "die tatsächlichen Zeichenfolgen Q und A sind. Sie müssen also nur sicherstellen, dass Ihr Modell diese Eigenschaften enthält: 'var answerOne = Request [" Question1 "];' – Wobbles

+0

Wenn Sie kein stark typisiertes oder definiertes Modell verwenden und es flexibler gestalten möchten, müssen Sie sich vielleicht wagen außerhalb der MVC-Normen und sammle deine Daten in ein Wörterbuch, das die 'Request'-Requisite im' HttpPost'-Handler wiederholt. – Wobbles