0

我有我的主页和两个部分视图。一个局部视图是菜单,另一个是 Telerik 网格。我想要实现的是在网格中选择一行,当我单击菜单中的一个按钮时,我希望页面导航到传递所选行(id)的那个动作。我想刷新整个页面,而不仅仅是带有网格的 div。

我尝试使用document.location = "/Pedido/DetalhePedido/" + id; 但我没有收到控制器的 ID。我也尝试使用$.get('@Url.Action("detalhePedido", "Pedido")', data, function (result) { });通常我使用它来刷新 div,但我似乎无法在整个页面上使用它(它可能不应该)。

您通常在 Web 应用程序中使用哪些方法来重现这种行为?

4

1 回答 1

0

因为点击该行发生在浏览器上,所以您不能依赖控制器或模型中的任何内容,除非它已经在您的原始模型中的某个位置。我通过将隐藏的 Id 列添加到网格和用于渲染的模型来实现这一点,然后将客户端事件和处理程序添加到网格和视图中。查看客户端事件下为网格提供的示例,了解您可以利用的一些不同客户端事件。

在您的网格上,首先添加 Id 列(如果您愿意,可以隐藏):

.Columns(columns =>
{
   columns.Bound(o => o.Id).Hidden(true);
}

然后添加 ClientEvents 并连接 onRowSelect,如下所示:

.ClientEvents(events =>
{
    events.OnRowSelect("onRowSelected");
}

然后添加一个函数来处理这个事件,如下所示:

function onRowSelected(e) {
    var id = e.row.cells[0].innerHTML;
    window.location = "Something/Details/" + id;
}

更新

听起来你在客户端上做的一切都是正确的。问题可能出在其他地方,在您的操作或绑定中。但可以肯定的是,在冒险走这条路之前,先看看/Pedido/DetalhePedido/" + id实际上是什么警报。您应该能够接受它并将其直接输入到浏览器的 url 中并点击您的操作只要正确定义了您的操作,就可以接受一个名为 id 的 int。

如果它仍然是一个问题,你需要看看你的行动。是否标记为 Post?如果是 Window.Location 将不起作用,因为它不是帖子。它接受的参数是名为 Id 且类型为 int 的参数吗?如果不是,应该是吗?您是否更改了路线,如果是,您的 Url 是否与定义的任何路线匹配?

于 2012-09-14T09:15:35.393 回答