custompostback __dopostback未从锚标记触发

时间:2016-10-05 16:22:14

标签: javascript c# html asp.net

所以我建立了一个实时搜索框,可以更新密钥。当用户键入时,它会使用与字符串输入匹配的项填充范围。

我正在尝试使用锚标记动态创建链接,这样当用户点击弹出结果范围中的一个结果时,它会获取用户员工编号,并在服务器端拾取客户回复的位置。< / p>

在keyup上运行的Javascript函数,用于构建结果范围:

   function liveSearch() {
            //debugger;
            $("#<%= QuickNameSearch_error.ClientID %>").text("");
            $("#<%= QuickNameSearch_error.ClientID %>").hide("");
            var searchField = $("#<%= QuickNameSearch_textbox.ClientID %>").val();
            if (searchField.length == 0) {
                $("#QuickNameSearchResults").hide();
                return;
            }
            else {
                $("#QuickNameSearchResults").show();
            }
            var regex = new RegExp(searchField, "i");
            var output = '<div class="liveSearchOuter">';
            var count = 0;
            $.getJSON('Scripts/LiveSearchData.js', function (data) {
                $.each(data, function (key, val) {
                    try {
                        if ((val.preferred.search(regex)) != -1 || (val.surname.search(regex) != -1)) {
                            if (count % 2 == 0) {
                                output += '<div class="liveSearchItem liveSearchItemLight">';
                            }
                            else {
                                output += '<div class="liveSearchItem liveSearchItemDark">';
                            }
                            output += "<div><b><a id='hlEmpName" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.preferred.trim() + " " + val.surname.trim() + "</a></b></div>";
                            output += "<div><b><a id='hlEmpEmail" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.email.trim() + "</a></b></div>";

                            output += '</div>';
                            count++;
                        }
                    }
                    catch (err) {
                        alert(err);
                    }
                });
                if (count == 0) {
                    output += '<div class="liveSearchItem liveSearchItemLight"><div>No results found</div>';
                }
                output += '</div>';
                $("#QuickNameSearchResults").html(output);
            });
        }

        function CustomPostBack(argStr) {
            debugger;
            __doPostBack('CustomPostBack', argStr);
        }

在页面加载上运行的C#函数:

if (Page.IsPostBack)
        {
            if ((Page.Request["__EVENTTARGET"] == "CustomPostBack") && (Page.Request["__EVENTTARGET"] != ""))
            {
                string eventTarget = Page.Request["__EVENTTARGET"];
                string eventArgument = Page.Request["__EVENTARGUMENT"];
                ShowEmployeeProfile(eventArgument.Trim());
            }
        }

我之前在javascript中使用自定义回发效果很好,但从来没有使用过锚标记。我在这里读到这是可能的,但我看不出我出错的地方,我几个小时都在阅读问题和答案。

我遇到麻烦的主要两行是:

output += "<div><b><a id='hlEmpName" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.preferred.trim() + " " + val.surname.trim() + "</a></b></div>";
output += "<div><b><a id='hlEmpEmail" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.email.trim() + "</a></b></div>";

我尝试过一百种小变化。他们在运行时渲染:

<a id="hlEmpName0" href="javascript:void(0)" onclick="CustomPostBack(" 123456');'="">Testy McTest</a>

页面不会回发并到达页面加载以捕获员工编号。

1 个答案:

答案 0 :(得分:0)

所以看起来你的报价有点棘手。看看你的最后一个片段:

onclick="CustomPostBack(" 845169");"

您的onclick被缩短了,因为您的参数使用双引号。浏览器将其视为onclick="CustomPostBack(",剩下的部分只是在不知名的地方的文本。

如果此值始终为数字,则只需删除它周围的引号:

output += '<div><b><a id="hlEmpName' + count + '" href="javascript:void(0)" onclick="CustomPostBack(' + val.emp_no.trim() + ');">' + val.preferred.trim() + ' ' + val.surname.trim() + '</a></b></div>';

如果它必须是字符串值,那么您可以通过执行&apos;而不是"来转义单引号:

output += '<div><b><a id="hlEmpName' + count + '" href="javascript:void(0)" onclick="CustomPostBack(&apos;' + val.emp_no.trim() + '&apos;);">' + val.preferred.trim() + ' ' + val.surname.trim() + '</a></b></div>';