Gleomarp
Gleomarp

Reputation: 33

MVC get data from dynamic field

I'm very new in MVC :(

I created a dynamic form by cloning a principal DIV element and its elements. The elements are combobox, textbox and a date textbox. When I create a new "clone", the DIV every member of itself has an incremental ID like tab_Container, tab_Container_1, text, text1, combo, combo1, etc... Now, I'm trying to get the values of each member in the Divs into the controller.

Googling I find something like this:

    [HttpPost]
    public ActionResult NewEntry(Model Entry)
    {

        Control myControl = new Control();
        myControl.FindControl("Text0");

        if (myControl != null)
        {
        /// apparently, find the control,here i wanna to get the value of each field !! ¿?
          /// do i have to create a list[] ... exist something like Entry.Text0 = myControl.value? 
        }
        else
        {
           Response.Write("Control not found");
        }

        return View(Entry);
    }

Any suggestion? Is Control the best option? Do I have to do something else in Javascript code?

Upvotes: 2

Views: 2298

Answers (1)

Dylan Hayes
Dylan Hayes

Reputation: 2366

While it's normally better to have some sort of Model / ViewModel this situation is a bit different. MVC binds on the "Name" property of your form inputs.

So say for instance your razor syntax generates something like this:

<form>
    <input type="text" name="input1" />
    <input type="text" name="input2" />
    <!-- etc etc etc -->
    <input type="submit" value="submit" />
</form>

since this is dynamically generated and you don't have a model that would cleanly bind to this. You can use the FormCollection type as the parameter of your action. This gives you a collection of all items posted to the server that you could then loop through or peer into to get the properties that you want.

public ActionResult myAction(FormCollection collection)
{
    var value = collection["input1"];
    var value2 = collection["input2"];

    return View();
} 

Upvotes: 2

Related Questions