I am trying to make a Create page for my model object. Object which I am trying to create have "one to many" relationship. So for now I am trying to add multiple fields for it. I have found this answer: MVC "create view" when there is one to many relationship in model The problem is that I should have at least 10 additional fields. Or in the best case I should have possibility to set their amount manually. So I decided to use an array. But in C# I can't set it's size in model because arrays are dynamic.
SO THE QUESTION IS: Where can I set size of array so the Razor will know how many fields to create.
Here are my models:
public class OrderCreateView
{
//Other fields
public ComponentOfOrder[] ComponentOfOrders { get; set; }
}
public class ComponentOfOrder
{
public string NameOfComponentOfOrder { get; set; }
}
Here are my Controller's methods for Create page:
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "anotherStuff,ComponentOfOrders")] OrderCreateView orderCreateView)
{
if (ModelState.IsValid)
{
Order order = new Order
{
//Another fields
};
db.Orders.Add(order);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(orderCreateView);
}
My Razor page:
@model Safronov.Models.OrderCreateView
@{
ViewBag.Title = "Create";
//Model.ComponentOfOrders = new Safronov.Models.OrdersDB.ComponentOfOrder[10];
//here it doesn't work with error message "Object reference does not point to an instance of an object"
}
some stuff on page
@foreach (var component in Model.ComponentOfOrders)
{
<div class="form-group">
@Html.LabelFor(x => component.NameOfComponentOfOrder, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(x => component.NameOfComponentOfOrder, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(x => component.NameOfComponentOfOrder, "", new { @class = "text-danger" })
</div>
</div>
}