2017-01-12 2 views
0

Ich habe Probleme, eine Liste von Sicht zu Controller in MVC zu senden. Probleme beim Senden einer Liste von der Ansicht an den Controller MVC

Dies ist der Code im Blick:

foreach (var c in ViewBag.Categories) 
{ 
    <a href="@Url.Action("SubCategory", "Product", new { selected = selected, id = @c.Item.ID, category = @c.Item.Name })" id="link" class="list-group-item"> 
    <span> @c.Item.Name</span> 
    </a> 
// { TempData["Childrens"] = c.Children; } 

}

Die ViewBag.Categories enthalten ein Kind Liste für jedes Element, wie Sie in der beigefügten Screenshot sehen: enter image description here

Dies ist der Code im Controller:

public ActionResult SubCategory(string selected, int id, string category) 
{ 
     var childrens = TempData["Childrens"] as IEnumerable<Helpers.TreeItem<Categories>>; 
     var listOfChildrens = childrens.ToList(); 

    } 

Ich brauche, dass Kinder Liste in der Actionparameterliste, etwa wie folgt:

public ActionResult SubCategory(string selected, int id, string category, **childrens**) 
{ 

Können Sie bitte Rat mir, wie dies zu erreichen? Vielen Dank im Voraus!

+0

Warum verwenden Sie TempData in-Controller und in Ansicht Sie verwenden ViewBag? –

+0

Die TempData war nur für Test – Orsi

+0

Warum erstellen Sie nicht ** viewmodel ** für diese, die ausgewählte, ID, Kategorie und Kategorie Liste enthält und dann übergeben, um anzuzeigen, anstatt viewbag – Curiousdev

Antwort

0

Fügen Sie was Sie wollen aus Formular in einem Modell und reichen Sie dieses Modell und Sie müssen Childrens in Ihrer Sicht als Hidden fields so rendern, wenn Sie senden Controller können sie übereinstimmen.

public Class MyModel { 
    public string selected {get;set;} 
    public int id {get;set;} 
    public string category {get;set;} 
    public List<Children> childrens {get;set;} 
} 



for (int i= 0; i< Model.Categories.Count; i++) 
{ 
    .... 
    @Html.HiddenFor(x=> Model.childrens[i].Yourproperty1) 
    @Html.HiddenFor(x=> Model.childrens[i].Yourproperty2) 
    .... 
} 

Wenn Sie nicht wollen, ein Modell erstellen und halten mit Viewbag tun hat, immer noch möglich, aber man muss passiert alle Eigenschaften, die Sie von den Kindern als HiddenFileds mit den gleichen name müssen an der Steuerung, wenn Sie nicht wollen, um es in Ihrem Formular zu zeigen

Sie müssen diesen Code für Ihr Unternehmen und Ihre Eigenschaften ändern, aber es nur für die Präsentation meiner Idee.

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

+0

Ich habe das Viewmodel erstellt, wie Sie es vorgeschlagen haben, und jetzt gebe ich eine Liste an die View weiter. Können Sie bitte in einer weiteren Frage beraten. Was wäre der beste Weg, versteckte Felder an den Controller zu senden? – Orsi

+1

@Orsi Wenn Sie diese Felder in Ihrem Formular hinzufügen und das Formular senden, wird es an Controller senden 'öffentliche ActionResult SubCategory (MyModel-Modell)' –

+0

Ich fügte in einer neuen Antwort meine Fragen – Orsi

Verwandte Themen