Kendo Objects失去了功能和风格

时间:2015-06-23 13:48:17

标签: javascript c# jquery asp.net-mvc kendo-ui

我遇到了一些kendo对象,特别是按钮,下拉列表和文本框。我的情况是这样的:我有一个局部视图,加载一个部件列表和一个项目列表。每个项目都是列表,其中包含一个链接,该链接打开一个kendo窗口,用于加载有关零件或项目的信息的部分视图。所有部件共享一个窗口,但信息会根据部件进行更新,并且所有项目共享一个窗口,其中所有信息都根据项目进行更新。该窗口在包含零件列表的局部视图上实例化,但在单击零件/项目之前不可见。然后将数据从单独的局部视图加载到窗口上,然后打开窗口。每个窗口都包含kendo按钮,kendo文本框和kendo下拉列表。

首次加载时,项目和部分链接都能正常工作。它们将继续工作,直到用户打开其他类型的链接(部分或项目)。两个窗口然后停止运作。窗口打开,但所有kendo对象都失去了功能。例如,下拉列表变为文本框,按钮呈现平坦的蓝色外观,并且表单从CSS中丢失其样式。我在这个项目中成功地使用了kendo对象很多次,所以我知道这个视图的东西。我检查了窗口的名称和ID以及窗口中的所有对象,没有共享。我也更改了部分视图中的javascript函数的名称(我知道这是不好的做法,但我从来没有想出正确的方法)彼此不同。问题依然存在。

我没有足够的声誉来发布图片,并且大多数图片托管网站在工作时被屏蔽,因此我无法发布任何视觉帮助。

以下是其中一个窗口的代码。

 <div style="width:100%;text-align:center;">
    <div style="display:inline-block; vertical-align:central">
        <table>
            <tr>
                <td>
                    @Html.Kendo.Button.Name("test1").Content("Add    Costs").Events(Sub(events) events.Click("enterActualInfo"))
                </td>

                <td>
                    @Html.Kendo.Button.Name("test2").Content("View Change History").Events(Sub(events) events.Click("showProjectHistory"))
                </td>

                <td>
                    @Html.Kendo.Button.Name("test3").Content("GPC/Target").Events(Sub(events) events.Click("addGPC"))
                </td>
            </tr>                
        </table>
    </div>
</div>

这是打开窗口的代码

    function sendProjInfo(projNum) {

    var projectWindow = $("#custProjWindow").data("kendoWindow")
    $.ajax({
        type: "GET",
        url: "@Url.Action("getCustProjInfo", "Home")",
        data: { custProjNumber: projNum },
        datatype: "html",
        success: function (result) {
            projectWindow.content(result).open()

        }
    })
}

//when a part number is clicked, open a new window that has thats part information
function sendPartInfo(partNumber) {

    var partWindow = $("#partWindow").data("kendoWindow")
   $.ajax({
        type:"GET",
        url: "@Url.Action("getPartInfo", "Home")",
        data: {partNumber: partNumber},
        datatype: "html",
        success: function (result) {
            partWindow.content(result).open();
        }
    })

}

这是windows的实例化。

@Html.Kendo.Window.Name("custProjWindow").Title("Edit Customer Project").Draggable.Resizable.Actions(Sub(actions) actions.Minimize.Maximize.Close()).Visible(False)

@Html.Kendo.Window.Name("partWindow").Title("Edit Part").Draggable.Resizable.Actions(Sub(actions) actions.Minimize.Maximize.Close()).Visible(False)

非常感谢任何建议。如果有助于解决问题,我很乐意发布更多信息。提前谢谢。

-Eric

2 个答案:

答案 0 :(得分:1)

在发布此问题之前,我花了很多时间研究这个问题。在发布问题后几分钟,我修复了它。

对于遇到此问题的其他人或类似问题:

  • 确保没有对象共享ID。显然这很糟糕。
  • 如果有任何事件调用JS函数,请确保它们拼写正确并且在中 引号。
  • 如果任何事件调用JS函数,请确保在调用它的对象之前加载该函数。我只是将我的功能放在按钮上方,它修复了我的所有问题。我确信这是一个我尚未学习的更好的练习,但它是一个开始。
  • 始终检查您的浏览器调试器!那里总是有价值的信息。

祝所有有类似问题的人好运。

答案 1 :(得分:1)

嗯,很容易确定原因:双重身份证。当你打开第一个没有问题,因为按钮是#test1,#test2和#test3,但是当你加载另一个时,那些id会被重复到同一页面

您应该更改部分视图,以便按钮的名称是动态且唯一的:

来自:

@Html.Kendo.Button.Name("test1").Content("Add    Costs").Events(Sub(events) events.Click("enterActualInfo"))

要:

@Html.Kendo.Button.Name("test1_" + ViewBag.someId).Content("Add    Costs").Events(Sub(events) events.Click("enterActualInfo"))

在你的控制器中,你有一个返回你的partialView的动作,对吧?在那里,您必须传递唯一ID,以区分每个部分与其他部分。

public PartialViewResult _YourPartialView()
{
    ViewBag.someId = variableName; // this should be something like a model Id or something.
    return PartialView();
}

您可以在控制器中使用变量,或者在单击加载部分视图的链接时通过javascript发送内容。