从脚本调用Html.Actionlink

时间:2018-10-04 10:43:38

标签: javascript html asp.net-mvc devexpress devexpress-mvc

我正在尝试从脚本中调用操作链接,但是它不起作用, 但是当我使用window.open时,它可以工作,但是由于我的CSS视图,我需要其他属性,如果可以调用Html.ActionLink,则可以在与模板相同页面的选项卡中打开它。

这是代码:

 function OnRowDblClick(s, e) {
    alert(e.visibleIndex);
    GridViewCitiesList.GetRowValues(e.visibleIndex, "CityGuid", OnGetRowValues);
}

function OnGetRowValues(data) {
    var url = Html.ActionLink("Edit", "CityAction", "City", new { CRUDType: CRUDTypes.Update, ModelGuid: data }, new { class: "btn btn-success", target: "_blank", title: "City Detail" });
    window.location.href = url;
}

错误说:

  

未捕获的ReferenceError:未定义HTML

1 个答案:

答案 0 :(得分:1)

您当前的代码有几个问题:

1)Html.ActionLink是MVC助手,您应该在Razor CSHTML页面中添加@前缀以将其设置为HTML助手。

2)Html.ActionLink生成锚标记(<a>),而不是URL字符串。使用@Url.Action()助手来创建URL。

3)data是客户端变量,您不能将其传递给处理服务器端的HTML帮助器。您需要构建查询字符串以使用data参数添加ModelGuid

根据上面的说明,从此更改URL定义:

// this is totally wrong
var url = Html.ActionLink("Edit", "CityAction", "City", new { CRUDType: CRUDTypes.Update, ModelGuid: data }, new { class: "btn btn-success", target: "_blank", title: "City Detail" });

对此:

var url = '@Url.Action("CityAction", "City", new { CRUDType = CRUDTypes.Update })&ModelGuid=' + data;

或者您可以尝试在ModelGuid内添加routeValues参数查询字符串,并从客户端替换其值:

// this setup should also work
function OnGetRowValues(data) {
    var url = '@Url.Action("CityAction", "City", new { CRUDType = CRUDTypes.Update, ModelGuid = "XXXX" })';
    url = url.replace('XXXX', data);

    window.location.href = url;
}