剑道对象失去了功能和风格
本文关键字:功能 风格 失去 对象 | 更新日期: 2023-09-27 17:59:15
我遇到了一些剑道对象的问题,特别是按钮、下拉列表和文本框。我的情况是:我有一个局部视图,它加载了一个零件列表和一个项目列表。列表中的每个项目都包含一个链接,该链接打开一个剑道窗口,该窗口加载有关零件或项目的部分信息视图。所有零件共享一个窗口,但信息会根据零件进行更新,所有项目共享一个窗,其中所有信息都会根据项目进行更新。该窗口在包含零件列表的局部视图上实例化,但在单击零件/项目之前不可见。然后将数据从单独的局部视图加载到窗口上,然后打开窗口。每个窗口都包含剑道按钮、剑道文本框和剑道下拉列表。
第一次加载时,项目链接和零件链接都能正常工作。它们继续工作,直到用户打开另一种类型的链接,无论是零件还是项目。然后两个车窗都停止工作。窗口打开,但所有剑道对象都失去了功能。例如,一个下拉列表变成了一个文本框,一个按钮呈现出扁平的蓝色外观,并且工作表从CSS中失去了样式。我在这个项目中成功地使用了很多次剑道对象,所以我对这个视图有所了解。我检查了窗口和窗口中所有对象的名称和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();
}
})
}
这是窗口的实例化。
@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
很容易确定原因:双重id。当你打开第一个时,没有问题,因为按钮是#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,该id将区分每个分部和其他分部。
public PartialViewResult _YourPartialView()
{
ViewBag.someId = variableName; // this should be something like a model Id or something.
return PartialView();
}
您可以在控制器中使用变量,也可以在单击加载局部视图的链接时通过javascript发送内容。
在发布这个问题之前,我花了很多小时来研究这个问题。在发布问题几分钟后,我就解决了。
对于其他有此问题或类似问题的人:
- 确保没有对象共享ID。显然这很糟糕
- 如果任何事件调用JS函数,请确保它们的拼写正确且引号
- 如果任何事件调用JS函数,请确保在调用它的对象之前加载该函数。我只需将函数放在按钮上方,它就解决了我的所有问题。我相信还有更好的练习我还没有学会,但这只是一个开始
- 请始终检查浏览器调试器!那里总是有有价值的信息
祝有类似问题的人好运。