MVC 3页面导航和使用javascript传递参数

时间:2012-09-14 09:06:02

标签: javascript jquery asp.net-mvc telerik action

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

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

您通常在网络应用中使用哪种方法来重现这种行为?

1 个答案:

答案 0 :(得分: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;
}

更新

听起来你在客户端正在做的一切。问题可能在其他地方,在你的Action或Bindings中。但可以肯定的是,看看 / Pedido / DetalhePedido /“+ id 实际上是什么,然后冒险沿着这条路走。你应该能够把它直接输入到网址中只要您的操作被正确定义,您的浏览器就会点击您的操作,接受名为id的int。

如果仍有问题,你需要看看你的行动。是否标记为Post?如果它是Window.Location不会工作,因为它不是一个帖子。它接受的参数是Id还是int类型?如果没有,应该是吗?您是否更改了路线,如果是,您的网址是否与所定义的路线匹配?