5

我想在 @Url.Action 方法中传递一个 javascript 变量作为路由参数。

我喜欢将 screenmode javascript 变量作为路由参数传递给我的操作方法。

我有一个具有 ScreenMode 枚举属性的视图模型,基于它我应该在 Ajax 中调用一个动作。我还需要传递一个 javascript 变量作为路由的参数。

这是我尝试并得到编译错误的方法。

当前上下文中不存在名称“screenMode”

  $("#role-detail-form").submit(function (e) {

    if ($(this).valid()) {
    var screenMode = 0;
    @{
     if (Model.ScreenMode == UI.ViewModel.ScreenMode.New)
     {
       <text> 
       screenMode =2; 
       </text>
     }
    }
    $.post('@Url.Action("SaveRoleDetail", new { mode=screenMode})', 
            $(this).serialize(), function (data) {
                $("#role-detail").html(data);
                $.validator.unobtrusive.parse($("#role-detail"));
            });
        }
        e.preventDefault();
    });

我的行动是

 public ActionResult SaveRoleDetail(RoleModel viewModel, ScreenMode screenMode)
    {
    }
4

4 回答 4

7

您必须将其拆分并自己构建查询字符串,以便合并 Javascript 变量。

你需要这样的东西:

$.post('@(Url.Action("SaveRoleDetail"))?screenMode=' + screenMode)

编辑:虽然可能是最佳实践,但您应该将 ScreenMode 变量存储在您的模型中,然后在您的视图中放置一个 HiddenFor 。然后,每当您更改 Javascript 中的值时,只需更新隐藏输入的值,这样您的操作方法只需要将视图模型作为参数。如果您使用 JavaScript 发布表单,并且您可以调用$("#form").serialize()以在您的发布调用中将所有数据发送回。

于 2013-01-09T10:48:35.027 回答
4

也可以创建一个占位符然后替换它:

var url = '@Url.Action("GetOrderDetails", "Home", new { id = "js-id" })'
          .replace("js-id", encodeURIComponent(rowId)); 
于 2014-07-30T06:34:27.003 回答
0

如果您使用 T4MVC 和 jQuery,您可以调用 ActionResult 执行以下操作:

在控制器中:

public ActionResult SaveRoleDetail(RoleModel viewModel, ScreenMode screenMode)
{
}

在视图中:

    $.post("@Url.Action(MVC.Home.SaveRoleDetail())", { viewModel: param1, screenMode: param2) }, function (data) {

        //Do Work

    });
于 2013-01-09T11:56:41.457 回答
0

访问您的路线值(可能在 中html.HiddenFor)。来自 JavaScript 的值并在没有@Url.Action. 使用 URL 发布。

于 2021-12-11T08:34:31.433 回答