在Razor视图中使用JavaScript URL操作

18

我有一个JavaScript方法onRowSelected,它获取rowid。如何将rowid传递给带有HttpGet的控制器的某个操作?

function onRowSelected(rowid, status) {
        alert('This row has id: ' + rowid);
        //url: @Action.Url("Action","Controller")
        //post:"GET"
        // Something like this?
    }
2个回答

53
如果您的控制器操作需要一个id查询字符串参数:
var url = '@Url.Action("Action", "Controller")?id=' + rowid;

或者如果你想将它作为路由的一部分传递,你可以使用replace:

var url = '@Url.Action("Action", "Controller", new { id = "_id_" })'
    .replace('_id_', rowid);

如果你要发送一个AJAX请求,另一种可能性是将它作为POST请求的一部分传递:

$.ajax({
    url: '@Url.Action("Action", "Controller")',
    type: 'POST',
    data: { id: rowid },
    success: function(result) {

    }
});

如果你使用GET方法,也可以将其作为查询字符串参数:

$.ajax({
    url: '@Url.Action("Action", "Controller")',
    type: 'GET',
    data: { id: rowid },
    success: function(result) {

    }
});

所有这些假设你的控制器操作当然需要接受一个id参数:

public ActionResult Action(string id)
{
    ...
}

因此,您可以看到有许多实现相同目标的方法。


我不知道为什么第一个答案不起作用。Ajax的答案运行良好。 - nebula
即使在Firebug中也没有触发任何事件。URL没有改变。 - nebula
你的HTML中生成的URL是什么?右键单击浏览器并查看源代码。如果您不发送AJAX请求,下一步会对url变量执行什么操作?您希望浏览器如何导航离开当前页面?你写了什么代码?我无法读取你的想法。 - Darin Dimitrov
我尝试使用 $.get(url, function (result)){ },但发现我的错误很愚蠢,我没有创建结果容器。现在它可以工作了。谢谢。 - nebula
1
我真的很想知道为什么上面的任何选项都会起作用? @Url.Action("Action", "Controller") 是razor语法。JavasScript(即 onRowSelected 事件处理程序)将在浏览器中执行,它不知道 @Url.Action 的任何信息。我有什么遗漏吗? - LP13

0

Darin的方法将完美地发挥作用。

我建议在jsp中使用@Html.actionlink来使用模型值,这是另一种方式。

var URLvalue='@Html.ActionLink("UserString", "action", new { routeValueName1 = "__value1__", routeValueName2="__value2__" }, htmlAttributes: new { @class = "btn btn-default", @role = "button" })'
     .replace('__value1__', Model.somevalue).replace('__value2__',  Model.somevalue);

你可以在 JSP 或 jQuery 中随时使用 URLvalue。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接