将razor @和@:语法混合在同一行

时间:2014-02-20 09:41:01

标签: jquery asp.net-mvc razor

我想给控制器打一个电话。 通常可以这样做:

var url = '@Url.Action("DeleteSelectedPermissions", "Mycontroller")'
var postResult = $.post(url, { userId: GetUserId(), selectedRowsIDs: selectedIDs });

但我需要从javascript设置控制器名称。

我试过这个

var controller = applicationsPageControl.GetActiveTab().name;
var url = '@Url.Action("DeleteSelectedPermissions", @:controller)'
var postResult = $.post(url, { userId: GetUserId(), selectedRowsIDs: selectedIDs });

和此:

var controller = applicationsPageControl.GetActiveTab().name;
var url = '@Url.Action("DeleteSelectedPermissions", @:controller @)'
var postResult = $.post(url, { userId: GetUserId(), selectedRowsIDs: selectedIDs });

但我得到语法错误:Razor期望右括号

2 个答案:

答案 0 :(得分:3)

你有点打败我!

var controller = applicationsPageControl.GetActiveTab().name;
var url = '@Url.Action("DeleteSelectedPermissions", "PCN")';
url = url.replace("PCN", controller);
var postResult = $.post(url, { userId: GetUserId(), selectedRowsIDs: selectedIDs }

是的,您使用占位符。 如果您对前进有用,如果您有ActionLink并且想要动态更改参数,也可以使用占位符。

@Html.ActionLink("linkText", "action", "controller", routeValues: new { myParam = "__plc__" }, htmlAttributes: new { id="myLink" })

并在javascript中...(这里,JQuery用于将浏览器的文化作为参数发送。这当然只在运行时才知道,Razor输出的链接赢了&#39 ; t知道要放什么价值。

<script>
$(function () {

    $('#myLink').prop('href', $('#myLink').prop('href').replace('__plc__', navigator.language ? navigator.language : navigator['userLanguage']));

答案 1 :(得分:0)

我不知道这是不是最好的方式,但它有效:

var controller = applicationsPageControl.GetActiveTab().name;
var url = '@Url.Action("DeleteSelectedPermissions", "PCN")';
url = url.replace("PCN", controller);
var postResult = $.post(url, { userId: GetUserId(), selectedRowsIDs: selectedIDs });