Html 数据属性未正确转换为 HtmlHelper 中“jquery.get()”的“成功”部分

问题描述

我正在尝试为 jstree 节点创建一个 HtmlHelper。我的部分目标是将“select_node”逻辑封装成可重用的格式。出于我们的目的,我们可以期望使用 jquery“GET”,它将调用 MVC 控制器方法。该 URL 需要是动态的,并通过 html 自定义数据属性传入。成功后的结果行为也需要是动态的,并且也通过相同的方式传递。我的问题是,尽管传入的 URL 被正确解释和调用(控制器方法被命中),但我无法让“成功”部分正常工作。下面是带有相应注释的代码示例。非工作场景(最后一次评论尝试“data.node.li_attr.success”)将是理想的,因为我们需要传入多行。

            writer.WriteLine("</ul>");
            writer.WriteLine("</div>");
            writer.WriteLine($"<script>");
            writer.WriteLine($"$({treeParamModel.TreeName}).jstree({{"); // base tree deFinition

            // "core" config standard to every jstree
            writer.WriteLine("'core':{");
            writer.WriteLine($"'multiple':{treeParamModel.IsMultiSelectAllowed.ToString().ToLower()}");
            writer.WriteLine("},");

            // "types" plugin
            writer.WriteLine("'types':{");

            writer.WriteLine("'default':{");
            writer.WriteLine($"'icon':'{treeParamModel.IconPath}'");
            writer.WriteLine("}");
            writer.WriteLine("},");

            writer.WriteLine("'plugins' : ['types']");  // define which plugins to bring in
            writer.WriteLine("})");

            writer.WriteLine($".on('select_node.jstree',function (e,data) {{");
            writer.WriteLine("$.get({url: data.node.li_attr.get_url,");
            writer.WriteLine("success: function (result) { alert(data.node.li_attr.success)}");  // works (correctly displays variable content.)
            //writer.WriteLine("success: function (result) { $(data.node.li_attr.success)}");  // WHY?  "Uncaught Error: Syntax error,unrecognized expression: alert('hello')"
            writer.WriteLine("});");
            writer.WriteLine("});");
            writer.WriteLine("</script>");

MVC 视图传入以下内容

@{
var treeName = "tree";
var success = "alert('hello');";
}

更新 我和我的同事发现使用“eval()”函数几乎可以达到我们想要的结果。

 writer.WriteLine("success: function (result) { eval(data.node.li_attr.success)}");

按预期工作,除了它在第一个空格后停止评估内容

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)