我正在尝试从脚本中调用操作链接,但是它不起作用,
但是当我使用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
答案 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;
}