2014-05-19 3 views
1

나는 KendoUI DropDownList로는 검도 그리드 내부에 배치하고 어떻게 내가 수있을 것 1 위의 코드를 사용하여MVC 4 | 검도 UI | DropDownList로 변경 이벤트

function onDropDownChanged(e) {  
     var text = $("#TestMethodId").data("kendoDropDownList").value(); 
     alert(text);  
    } 

아래의 코드를 사용하여 드롭 다운 목록에서 변경 이벤트를 설정할 수 있어요 'ViewBag.Test'와 같은 ViewBag 콘텐츠에 액세스하려면 어떻게해야합니까? 2. ViewBag 내부의 값을 반복하여 그리드의 textbox 속성 중 하나를 해당 뷰백의 값으로 설정해야합니다.

답변

2

짧은 대답은 입니다. 너는이 될 수 없습니다. 클라이언트 측 처리와 서버 측 처리를 혼합하려고합니다. 이것은 단순히 불가능합니다.

onDropDownChanged 기능은 사용자가 수행 한 작업 후에 실행됩니다. 즉, Razor 엔진은 이미 .cshtml 개의 파일을 구문 분석하고 HTML 코드를 클라이언트에 보냈습니다. 이는 다시 ViewBag 개체를 포함하는 명령이 이미 실행되었음을 의미합니다.

지금, 귀하의 ViewBag에 무엇이 포함되어 있는지 정말로 모르겠습니다. 따라서 일부는 string (값)이고, 속성 이름은 dropdownlist에 옵션으로 저장되었다고 가정합니다. dropdownlist에서 선택한 내용을 토대로 ViewBag의 데이터에 액세스하려고합니다. , 컨트롤러에서

  1. 열쇠는 당신이 필요로하는 무엇이든 dropdownlist의 값과 값을, 존재와 사전을 만들; :이 경우, 다음을 수행해야합니다 ,보기에서 ViewBag
  2. 에서이 사전을 저장 JSON 문자열로 사전을 변환하고, 같은 키 onDropDownChanged 이벤트에서
  3. 의 객체를 얻기 위해 그것을 클라이언트 측을 구문 분석, 단지 text 선택을 사용하여이 개체에 액세스 원하는 값을 얻기 위해서.

귀하의 질문은 약간 모호합니다. 따라서 귀하가 필요로하는 것이 100 % 확신 할 수 없습니다. 결론적으로 서버 쪽 코드와 클라이언트 쪽 코드를 이렇게 섞을 수는 없습니다. 속임수에 의존해야합니다.

편집 : 다음은 유용한 비법입니다. 보기에서 ViewBag 직렬화하고 값을 JavaScript 변수에 저장하십시오. 텍스트를 객체로 파싱한다. 이제 JavaScript를 사용하여 반복 할 수 있습니다. 다음과 같이

<script> 
    var tmpViewBag = '@Html.Raw(Json.Encode(ViewBag.MyObject))'; //notice I'm using ' and not " 
    var myOptions = []; 

    $(document).ready(function() { 
      myOptions = JSON.parse(tmpViewBag); //you now have the object array 
    }) 
</script> 

는 select 이벤트 내부에서 이제 객체 배열을 사용할 수 있습니다

function onDropDownChanged(e) {  
    var text = $("#TestMethodId").data("kendoDropDownList").value(); 
    //alert(text);  

    for (var i = 0; i < myOptions.length; i++) { 
     if (myOptions.TestName === text) { //it can as well be ".TestId" 
      $("#mytextbox").value(myOptions.PassThreshold); //you can set whatever you want 
      break; 
     } 
    } 
} 
+0

당신은 이것에 대한 대안을 제안 할 수 있습니다. 내 뷰백으로 데이터가 지속됩니다. 선택 변경에 나는 단지 뷰백 내용을 반복하고 텍스트 상자 값을 채울 필요가있다. –

+0

@SantoshNavle, 내가 작성한 답변에서 모든 가능한 값으로 사전을 만들 수 있습니다. 이것은 물론 값의 합리적인 목록이 적은 경우에만 작동합니다. 이 사전을 JavaScript 객체로 변환하십시오. 그런 다음이 객체는 드롭 다운 값을 사용하여 반복 또는 직접 액세스 할 수 있습니다. –

+0

직렬화 된 뷰백의 값은 다음과 같습니다. [{ "TestId": 1, "TestName": "마커", "PassThreshold": 4, "FailThreshold": 4}, { "TestId": 2, "TestName ":"ABC ","PassThreshold ": 5,"FailThreshold ": 5}, {"TestId ": 3,"TestName ":"VI ","PassThreshold ": 6,"FailThreshold ": 6}] 지금 드롭 다운 값이 선택되면 '1'이라고 말하십시오. TestId = 1 (선택한 드롭 다운 값)에 대한 통과 임계 값을 가져와 그리드의 텍스트 상자 (예 : 4)에 표시해야합니다. 이제는 분명히 이해되기를 바랍니다. –