2011-06-28 156 views
3

我想從一個javascript函數中爲我的表單上的組合框的內容分配一個剃刀變量。像這樣:在javascript中設置剃鬚刀變量

<script type ="text/javascript"> 
<!-- 
    function SomeFunction() { 

     var hours = document.getElementById("Hours"); 
     var task = document.getElementById("TaskType_ID"); 
     @{    
      var tsk = @:task.value;    
     } 

     @{    
     <text> 
      hours.value = '@ViewBag.TaskTypes.GetHours(tsk)'; 
     </text> 
     } 

     return true; 
    } 

//--> 
</script> 

線(和所有其他的變化我已經試過)

var tsk = @:task.value; 

導致錯誤。

+0

什麼是「剃刀變量」? – RobG

+1

好的,你在這裏混合了客戶端(javascript)和服務器(asp.net/razor)技術,而且它不會像你嘗試的形式那樣工作。您需要與AJAX彌合差距。我是否正確地假設你有兩個組合框,並且當用戶從任務組合框中選擇一個選項時,你希望小時組合框中的選項發生改變? –

+0

@RobG Razor是用於在asp.net mvc 3中創建頁面的最新語法引擎。 –

回答

1

正如Chris指出的那樣,您正在混合客戶端和服務器代碼。 javascript是客戶端代碼,並且您需要使用ajax調用函數(get/post)從服務器返回所需的值。這裏是你可以做什麼的代碼片段:

$("#tasks").change(function(){ 
    $.get('url',$(this).val(), function(data){ 
     // data is the hours returned from the selected task 
     $("#hours").val(data); 
    }); 
}); 

而不是打電話給你選擇一個任務的服務器每次,你可以隨時任務的值存儲在一個變量。謝謝

+0

謝謝@Xnake。我會試試這個,讓大家知道它是如何發生的。 – TomDW

1

好的。這是我最終做的。我不再將一個對象傳入視圖。我添加了一個綁定到第一個字段的change事件的腳本,然後通過ajax在我的控制器中調用一個動作,並將結果放入第二個字段。像這樣:

<script type="text/javascript"> 

    $(document).ready(function() { 
     $("#q").change(function() { 
      $.ajax({ 
       type: "GET", 
       url: "Home/Test?value=" + $('#q').get(0).value, 
       success: function(msg) { 
        $('#x').get(0).value = msg; 
       } 
      }); 
     }); 
    }); 

</script> 

謝謝你帶領我在正確的方向。隨着所有的剃刀語法,我看不到這仍然是HTML。我希望你們都喜歡看着我試圖把一個方形的釘子砸進一個圓洞!