1

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>
}
Community
  • 1
  • 1

1 Answers1

1

You can use a List of ComponentOfOrder.

List<ComponentOfOrder> mymodel=new List<ComponentOfOrder>();

and use by this way :

mymodel[0].NameOfComponentOfOrder

this is ur problem ?

Zebra
  • 66
  • 12