2015-01-10 23 views
0

我在cshtml頁面中使用了jquery腳本。簡而言之,我的問題是如何在cshtml頁面的@語句中使用var?在@ block剃鬚刀中使用jquery變量

下面的是我想要一個例子:

<select id="DefaultText"> 
    <option value="-1">-- select --</option> 
    @foreach(var d in Model.DefaultTexts) 
    { 
     <option value="@d.Id" >@d.Name</option> 
    } 
</select> 


<script type="text/javascript"> 
    $('#DefaultText').change(function() { 

     var id = parseInt($('#DefaultText :selected').val()); 
     var text = @Model.DefaultTexts.First(t => t.Id == id); 

     $('#CustomProductText').val(text); 
    }); 
</script> 

我無法到達變種標識。它超出了範圍。我也嘗試了for循環和if語句。但在if語句中,我得到相同的錯誤:超出範圍。

完整的故事是這樣的: 在我的頁面上我有一個下拉列表。要選擇的項目是默認文本部分的簡稱。根據id或名稱,我想在文本框中顯示默認文本部分。

#CustomProductText是我應該放置內容的文本框(代碼未發佈)。

我也嘗試了@:和聲明,但沒有奏效。

我在做什麼錯,或者甚至沒有可能我正在嘗試做什麼。

作爲一種替代方法,我在控制器中添加了一個動作來獲取文本形式。代碼如下:

<script type="text/javascript"> 
    $('#DefaultText').change(function() { 

     var id = parseInt($('#DefaultText :selected').val()); 
     $.post("Categories/GetDefaultText", { Id: id }, function (data) { 
      alert(data); 
     }); 


     //$('#CustomProductText').val(text); 
    }); 
</script> 

控制器代碼:

[HttpPost] 
    public ActionResult GetDefaultText(int id) 
    { 
     using(var context = new MyContext()) 
     { 
      var text = context.DefaultText.First(d => d.Id == id).Text; 
      return this.Content(text); 
     } 
    } 

這是行不通的。該操作在調試模式下不會被擊中。

問候,

丹尼爾

+0

作爲一般建議,不要注入JavaScript。這是維護噩夢,並避免你從腳本捆綁中獲得的任何效率。而是將值注入到頁面元素中,然後用jQuery選擇它們。 –

+0

既然你已經擁有'DefaultTexts'的Text屬性,你可以使用javascript'$('#CustomProductText').val($(this).find('option:selected').text())來訪問它。 ;'(你不需要調用控制器方法),但是顯示下拉菜單和另一個元素又有什麼意義呢? –

回答

0

是不爲你工作的$.post,你應該/符號前綴的網址,並預期將受到打擊:

$.post("/Categories/GetDefaultText", { Id: id }, function (data) { 
    alert(data); 
}); 

對於剃刀解決方案,您不能在剃刀代碼中使用JavaScript變量,因爲它不是腳本語言。剃鬚刀所做的僅僅是將字符串(無論是html還是javascript或其他)呈現在頁面中。

要做你想要的東西,你需要請求服務器將文本傳遞給你的頁面或者渲染頁面中的所有文本,然後在JavaScript中訪問這個渲染的內容。

+0

部署到不在域根目錄下的Web應用程序時,使URL絕對無效。 –

+0

添加/ sign爲我制定。謝謝!但你用單引號的解決方案不起作用。我仍然收到id在當前上下文中不存在的消息。我更喜歡linq選項,因爲數據已經加載到頁面中。你能幫我解開報價嗎?我錯過了一些特殊的庫嗎? – danielkaya

+0

@danielkaya我已經重新讀過您的問題,您無法從剃刀訪問javascript變量,請參閱我更新的答案。 –