我想在@ Url.Action方法中传递一个javascript变量作为路由参数。
我喜欢将screenmode javascript变量作为路由参数传递给我的action方法。
我有一个带有ScreenMode枚举属性的视图模型并基于它i 应该在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)
{
}
答案 0 :(得分:6)
您必须将其拆分并自行构建查询字符串,以便合并Javascript变量。
这就是你需要的东西:
$.post('@(Url.Action("SaveRoleDetail"))?screenMode=' + screenMode)
编辑:虽然可能是最佳做法,但您应该将ScreenMode变量存储在模型中,然后在视图中放置一个HiddenFor。然后,每当您更改Javascript中的值时,只需更新隐藏输入的值,这样您的操作方法只需要将视图模型作为参数。如果您要在JavaScript中发布表单,则可以致电$("#form").serialize()
将所有数据发回给您的帖子。
答案 1 :(得分:4)
还可以创建一个占位符然后替换它:
var url = '@Url.Action("GetOrderDetails", "Home", new { id = "js-id" })'
.replace("js-id", encodeURIComponent(rowId));
答案 2 :(得分: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
});