2017-08-09 167 views
-1

我有我的C#MVC中的多個部分視圖的主視圖。初始分部視圖包含從表格中的模型填充的列表。我想要能夠在表格上單擊一行,然後根據ID填充另一個局部視圖。從數據傳遞到控制器從視圖與C#/ Razor MVC

我最初使用:<tr type="submit" onclick = "location.href = '@(Url.Action("RowClicked", "Test", new { id = @Html.DisplayFor(modelItem => item.ID) }))'" >它沒有傳遞給服務器的ID,但它把我帶到一個新的頁面。

我不確定是否需要使用表單。我希望能夠單擊其中一行來重新繪製另一個基於單擊的行中ID的值而不刷新整個頁面的部分視圖。

如何在不調用新頁面的情況下使用Razor/C#將數據發送到服務器,以及如何從表的每一行執行此操作?

感謝

+0

如果你想留在同一頁面(並在成功回調中更新視圖),你需要使用ajax –

+0
+0

*如何使用Razor/C#將數據發送到服務器,而無需調用新頁面* - 這是不能完成的。您需要使用** [AJAX](http://api.jquery.com/jQuery.ajax/)**才能夠在不刷新頁面的情況下將數據發送到服務器。 –

回答

2

一些提示,你可以遵循:

選項1:從父頁繼承

默認情況下,通過調用呈現的任何局部視圖@ Html.Partial( 「PartialViewName」)將獲得傳遞給父視圖的視圖模型。

所以,如果您有:

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") 

的OrderLineItems頁面應該得到MyNamespace.OrderViewModel傳遞給它...所以你的局部視圖應該看起來像此:

OrderLineItems.cshtml

@model MyNamespace.OrderInfoViewModel 

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

選項2:指定型號

您可以使用第二個參數來指定要通過視圖模型。即

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 
} 

選項3:使用部分行動

如果您需要重新在多個頁面上使用局部視圖,使用局部視圖來消除必須使用相同信息填充不同視圖模型是一個好主意,因爲頁面將使用相同的局部視圖。

E.g.

視圖模型

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

控制器

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 
} 
相關問題