2015-06-23 35 views
0

我遇到了一些kendo對象,特別是按鈕,下拉列表和文本框的問題。我的情況是這樣的:我有一個部分視圖,加載一個零件列表和一個項目列表。每個項目都包含一個鏈接,該鏈接打開一個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(); 
     } 
    }) 

} 

,這裏是窗口的實例代碼。

@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

+0

感謝您的回覆!我不認爲這是一個問題,因爲它將新的信息重新加載到同一個窗口中。所以不會創建新的按鈕,只是對象的值正在改變。此外,只有在按順序打開和關閉一種類型的窗口時才能正常工作,只有在窗口類型交替時纔有效。 –

回答

1

那麼,很容易確定原因:雙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來區分每個部分和其他部分。

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

當您點擊加載部分視圖的鏈接時,您可以在控制器中使用變量或通過javascript發送內容。

0

我花了很多很多時間尋找到這個問題發佈了這個問題之前。發佈問題後幾分鐘,我就修正了它。

爲別人這個問題,還是一個類似的問題:

  • 確保沒有對象共用一個ID。顯然這是不好的。
  • 如果有任何事件調用JS函數,請確保它們拼寫正確並且在 引號中。
  • 如果有任何事件調用JS函數,請確保函數在調用它的對象之前加載。我只是把我的功能放在按鈕的上方,它修復了我所有的問題。我相信這是一種我尚未學習的更好的做法,但它是一個開始。
  • 總是檢查你的瀏覽器調試器!那裏總是有有價值的信息。

祝您好運給遇到類似問題的人。