0

在网格中显示学生 ID 和描述的学生数据网格。当用户单击它时,它还有一个选择按钮,该按钮将路由到 javascript 函数。此函数将在服务器端设置一些标志,关闭窗口,在搜索框上输入 studentID 并对 studentID 进行自动搜索。点击似乎正在做我想要它做的事情。但是,如果用户要双击网格中的一行,它应该做完全相同的事情。它也应该做一个帖子。双击是发帖两次。是什么导致它两次发帖?我一直无法弄清楚。我一直在各处保持警惕,但没有成功说明原因。

如果您可能想知道为什么我有数据路由和客户端脚本。该网格位于一个弹出页面中,该页面也被其他页面调用。当用户从另一个页面调用网格时,用户将能够选择多条记录,而不是从课程页面调用它时只能选择一条记录。

这是网格:

@(Html
    .Telerik()
    .Grid((IEnumerable<OverrideStudent>)SessionWrapper.Student.OtherStudentSelected)
    .Name("StudentData")
    .DataKeys(Keys =>
    {
        Keys.Add(c => c.StudentID);
    })
    .DataBinding(databinding => databinding.Server())
    .Columns(columns =>
    {
        columns.Bound(p => p.StudentId)
            .Title("Student ID")
            .Width(15)
            .Sortable(true)
            .Filterable(false);
        columns.Bound(p => p.StudentDescription)
            .Title("Description")
            .Width(65)
            .Sortable(true)
            .Filterable(false);
        columns.Command(command =>
        {
            command.Custom("AddStudent")
                .Text("Select")
                .DataRouteValues(routes =>
                {
                    routes.Add(o => o.StudentID).RouteKey("StudentID");
                    routes.Add(o => o.StudentDescription).RouteKey("StudentDescription");
                })
                .Action("Student", "StudentInfo");
             .HtmlAttributes(new { onclick = "PostData(this);StudentSelectClick(this)" });

        }).Width(20);
    }).ClientEvents(clients => clients
            .OnComplete("OnComplete")
        //.OnDataBinding("DataBinding")
        //.OnDataBound("onRowDataBound")
            .OnRowSelected("StudentDoubleClick")
            )
    .Sortable()
    .Selectable()
    .Filterable(filtering => filtering
                .Enabled(true)
    .Footer(true)
    .HtmlAttributes(new { style = "padding-right: 0.0em;" }))

以下是正在发布帖子的 JavaScript:

function StudentDoubleClick(e) {
        var fromCourse = "@SessionWrapper.Student.FromCoursePage";
        var fromList = "@SessionWrapper.Student.FromListingPage";
        if (fromCourse  == "True") {
            $('tr', this).live('dblclick', function () {
                alert("Inside TR count = " + count);
                count = count + 1;
                DoSearchStudent(e);
            });
        }

        if (fromList == "True") {
            $('tr', this).live('dblclick', function () {
                DoSearchStudent(e);
            });
        }
    }



function DoSearchStudent(e) {
        var row = e.row;
        var StudentID = row.cells[0].innerHTML;
        var StudentDescription = row.cells[1].innerHTML;
        //  alert(procCodeDesc);
        var data = { "StudentID": StudentID, "StudentDescription": StudentDescription, "action": "Double Click" };
        var url = '@Url.Action("Student", "StudentInfo")';
        $.ajax({
            url: url,
            type: 'post',
            dataType: 'text',
            cache: false,
            async: false,
            data: data,
            success: function (data) {
                window.top.location.href = window.top.location.href;
            },
            error: function (error) {
                alert("An error has occured and the window will not be closed.");

            }
        });
    }


//Single Click on BUtton


 function StudentSelectClick(e) {
        var windows = this.parent.$('#Window').data('tWindow');
        var fromCourse = "@SessionWrapper.Student.FromCoursePage";
        var fromList = "@SessionWrapper.Student.FromListingPage";
        if (fromCourse  == "True") {
            var studentInformation = e.toString();
            var data = { "myModel": "null", "studentInformation": studentInformation };
            var url = '@Url.Action("UpdatedFromSelect", "StudentProcedure")';
            $.ajax({
                url: url,
                type: 'post',
                dataType: 'text',
                cache: false,
                async: false,
                data: data,
                success: function (data) {
                    // window.top.location.href = window.top.location.href;
                    windows.close();
                    // setTimeout(this.window.top.location.href =    this.window.top.location.href, 1000);
                    window.top.location.href = window.top.location.href;

                },
                error: function (error) {
                    alert("An error has occured and the window will not be closed.");

                }
            });
        }
    }

这是双精度发布到的方法。它只是重定向到返回类型 ActionResult 的不同方法,该方法也重定向到返回 ActionResult 的索引页面:

public string Student(string StudentID, string StudentDescription, string action)
        {
            if (StudentDescription != null)
            {
                StudentDescription = HttpUtility.HtmlDecode(StudentDescription);
            }

            try
            {
               AddStudent(StudentID, StudentDescription, action);
            }
            catch (Exception e)
            {
                return "Error " + e.ToString(); 
            }

            return "Success";
        }

非常感谢您的帮助,谢谢。

4

1 回答 1

1

您是否检查过 jQuery 和 Unobtrusive 脚本在您的 html 中添加的次数?我在以前的项目中遇到了一个问题,其中一个被复制并导致了双重发布。

于 2013-06-21T17:10:15.697 回答