2017-08-09 1 views
-1

Ich habe eine Hauptansicht mit mehreren Teilansichten in meinem C# MVC. Die erste Teilansicht enthält eine Liste, die aus einem Modell in einer Tabelle aufgefüllt wird. Ich möchte in der Lage sein, auf eine Zeile in der Tabelle zu klicken und dann basierend auf der ID eine weitere Teilansicht zu füllen.Übergeben von Daten an den Controller aus der Tabelle in der Ansicht mit C#/Razor MVC

Ich habe ursprünglich verwendet: <tr type="submit" onclick = "location.href = '@(Url.Action("RowClicked", "Test", new { id = @Html.DisplayFor(modelItem => item.ID) }))'" > die ID an den Server übergeben, aber es hat mich auf eine neue Seite gebracht.

Ich bin mir nicht sicher, ob ich Formulare verwenden muss. Ich möchte in der Lage sein, auf eine der Zeilen zu klicken, um eine weitere Teilansicht basierend auf dem Wert der ID in der angeklickten Zeile neu zu zeichnen, ohne dass die gesamte Seite aktualisiert wird.

Wie senden Sie Daten mit Razor/C# an den Server im Allgemeinen, ohne eine neue Seite aufzurufen, und wie mache ich das aus jeder Zeile einer Tabelle?

Dank

+0

Sie müssen Ajax verwenden, wenn Sie auf derselben Seite bleiben möchten (und die Ansicht im Erfolgsrückruf aktualisieren) –

+0
+0

* Wie senden Sie Daten mit Razor/C# an den Server im Allgemeinen, ohne eine neue Seite aufzurufen * - Dies ist nicht möglich. Sie müssen ** [AJAX] (http://api.jquery.com/jQuery.ajax/) ** verwenden, um Daten ohne Seitenaktualisierung an den Server senden zu können. –

Antwort

2

Ein paar Hinweise, die Ihnen folgen:

Option 1: Vererben von Elternseite

standardmäßig jede Teilansicht wiedergegeben durch den Aufruf @ Html.Partial ("PartialViewName") wird das Ansichtsmodell an die übergeordnete Ansicht übergeben.

Also, wenn Sie haben:

View Model 

namespace MyNamesapce 
{ 
    public OrderInfoViewModel 
    { 
     public string OrderTitle { get; set; } 
     public IEnumerable<OrderItem> OrderItems { get; set; } 
    } 
} 

OrderInfo.cshtml

@model MyNamespace.OrderInfoViewModel 

<h1>@Model.OrderTitle</h1> 

@Html.Partial("OrderLineItems") 

Die OrderLineItems Seite ein MyNamespace.OrderViewModel an sie übergeben bekommen sollte ... so Ihre Teilansicht aussehen sollte dieses:

OrderLineItems.cshtml

@model MyNamespace.OrderInfoViewModel 

foreach (var orderItem in Model.OrderItems) 
{ 
    //Do stuff 
} 

Option 2: Geben Sie Modell

können Sie den zweiten Parameter verwenden, um die Ansicht Modell angeben weitergegeben werden. I.e.

OrderInfo.cshtml

@model MyNamespace.OrderInfoViewModel 

<h1>@Model.OrderTitle</h1> 

@Html.Partial("OrderLineItems", Model.OrderItems) 

OrderLineItems.cshtml

@model IEnumerable<OrderItem> 

foreach (var orderItem in Model) 
{ 
    //Do stuff 
} 

Option 3: Verwenden Teilaktionen

Wenn Sie wieder brauchen Wenn Sie eine Teilansicht über mehrere Seiten verwenden, kann es sinnvoll sein, eine Teilansicht zu verwenden, um zu vermeiden, dass verschiedene Ansichtsmodelle mit den gleichen Informationen gefüllt werden müssen, nur weil die Seite dasselbe Teil verwendet.

z.

Ansicht Modell

namespace MyNamesapce 
{ 
    public OrderInfoViewModel 
    { 
     public string OrderTitle { get; set; } 
    } 
} 

-Controller

public class OrderController : Controller 
{ 
    public ActionResult OrderInfo(int orderId) 
    { 
     OrderInfoViewModel viewModel = GetViewModel(orderId); 
     return View(viewModel); 
    } 

    public PartialViewResult OrderLineItems(int orderId) 
    { 
     IEnumerable<OrderItem> orderItems = GetOrderItems(orderId); 
     return Partial(orderItems); 
    } 
} 

OrderInfo.cshtml

@model MyNamespace.OrderInfoViewModel 

<h1>@Model.OrderTitle</h1> 

@Html.Action("OrderLineItems") 

OrderLineItems.cshtml

@model IEnumerable<OrderItem> 

foreach (var orderItem in Model.OrderItems) 
{ 
    //Do stuff 
} 
Verwandte Themen