if you form post html form fields:
<li>
<label for="name">Your name<span>*</span></label>
<input type="text" id="name" name="Name" />
</li>
<li>
<label for="phoneNumber">Telephone<span>*</span></label>
<input type="tel" id="phoneNumber" name="PhoneNumber" />
</li>
to a Controller using the [FromForm]
attribute, AspNet will modelbind the form fields to your parameters by matching the name=
attribute of the input elements to Property names on the parameter class:
class MyController : Controller
{
public IActionResult Index([FromForm]Contact contact){ ... }
}
// ----
public class Contact
{
public string Name {get;set;}
public string PhoneNumber {get;set;}
}
But what about model binding an array — for instance, if you have a list of question inputs, and want to store the answers in a list?
If you name each field as if it were an array element:
<fieldset id="q1">
<label class="question">Question 1</label>
<ul class="form-style">
<li>
<input type="radio" id="c1" name="answers[0]" value="@c1"/>
<label for="c1">@c1</label>
</li>
<li>
<input type="radio" id="c2" name="answers[0]" value="@c2"/>
<label for="c2">@c2</label>
</li>
</ul>
</fieldset>
<fieldset id="q2">
<label class="question">Question 1?</label>
<ul class="form-style">
<li>
<input type="radio" id="b1" name="answers[1]" value="@b1"/>
<label for="b1">@b1</label>
</li>
<li>
<input type="radio" id="b2" name="answers[1]" value="@b2"/>
<label for="b2">@b2</label>
</li>
<li>
<input type="radio" id="b3" name="answers[1]" value="@b3"/>
<label for="b3">@b3</label>
</li>
<li>
<input type="radio" id="b4" name="answers[1]" value="@b4"/>
<label for="b4">@b4</label>
</li>
</ul>
</fieldset>
then AspNet will bind the submitted fields named answers[0], answers[1], ...
to an array Property in your class with the matching name:
public class Questions
{
public string[] Answers {get;set;}
}
One thought on “Model Binding an Array from a Form Post | Asp.Net MVC & Asp.Net Core”