[英]Pass Data to Controller from Table in View with C#/Razor MVC
我的C#MVC中有一个包含多个局部视图的主视图。 初始局部视图包含一个列表,该列表是从表中的模型填充的。 我希望能够单击表上的一行,然后根据ID填充另一个局部视图。
我最初使用过: <tr type="submit" onclick = "location.href = '@(Url.Action("RowClicked", "Test", new { id = @Html.DisplayFor(modelItem => item.ID) }))'" >
确实将ID传递给了服务器,但是却把我带到了一个新页面。
我不确定是否需要使用表格。 我希望能够单击其中的一行以基于单击的行中ID的值重绘另一个局部视图,而无需刷新整个页面。
通常,如何使用Razor / C#将数据发送到服务器而不调用新页面,以及如何从表的每一行执行此操作?
谢谢
很少有提示可以遵循:
选项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:使用部分动作
如果您需要在多个页面上重用部分视图,则最好使用部分视图来避免只用同一页面来填充具有相同信息的不同视图模型。
例如
查看模型
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.