我的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
}