【问题标题】:Pass Data to Controller from Table in View with C#/Razor MVC使用 C#/Razor MVC 将数据从视图中的表传递到控制器
【发布时间】:2017-08-09 11:02:16
【问题描述】:

我的 C# MVC 中有一个包含多个部分视图的主视图。初始部分视图包含一个从表中的模型填充的列表。我希望能够单击表格上的一行,然后根据 ID 填充另一个局部视图。

我最初使用的是:<tr type="submit" onclick = "location.href = '@(Url.Action("RowClicked", "Test", new { id = @Html.DisplayFor(modelItem => item.ID) }))'" >,它确实将 ID 传递给了服务器,但它把我带到了一个新页面。

我不确定是否需要使用表单。我希望能够单击其中一行以根据单击的行中的 ID 值重绘另一个局部视图,而无需刷新整个页面。

一般而言,如何在不调用新页面的情况下使用 Razor/C# 将数据发送到服务器,以及如何从表的每一行执行此操作?

谢谢

【问题讨论】:

  • 如果要保持在同一页面上,则需要使用ajax(并在成功回调中更新视图)
  • 一般而言,如何在不调用新页面的情况下使用 Razor/C# 将数据发送到服务器 - 这是无法做到的。您需要使用 AJAX 才能在不刷新页面的情况下向服务器发送数据。

标签: c# asp.net-mvc razor


【解决方案1】:

您可以遵循的一些提示:

选项 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
}

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签