views:

52

answers:

2

I have a form which will include some optional questions that need to asked of the user. In my model it may look like

pubic Dictionary<String, String> Questions { get; set; }

where the key is the label and value is the text box. How can I create and populate controls for this? I'm new to ASP MVC, but it makes sense that something like this would be built in.

Is there a built in way to do this, or do I have to implement it myself? It seems like there should be a helper for it, since you don't really want to put this kind of code in the view.

I've tried

Html.EditorFor(model => model.Questions);

but it just spits out "[key, value]" to the view.

+1  A: 

There are a couple of ways you could go here.

  1. You could write your own helper quite easily - maybe something like this:

    public static string Question(Dictionary question) { Html.Label(question.Key); Html.Textbox(question.Value); }

  2. Create a custom display template for Dictionary<string, string> (or, rather, wrap the dictionary in a Question type to avoid ambiguity) that outputs what you want.

Tomas Lycken
A: 

Why not implement a Question class? Something like this I had in mind:

public class QuestionControl
{
      public int QuestionId{get;set;}
      public string Question{get;set;}
      public string Answer{get;set;}
      public virtual string GetHtml()
      {
           return string.Format("<label for=\"{0}\">{2}</label><br><input type=\"text\" name=\"{0}\" id=\"{0}\" value=\"{1}\">", QuestionId, Answer, Question);
      }
}  

Also, this way you can inherit and override GetHtml and have questions with checkboxes, radiobuttons etc.

Oskar Kjellin