我在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);
}
}
這是行不通的。該操作在調試模式下不會被擊中。
問候,
丹尼爾
作爲一般建議,不要注入JavaScript。這是維護噩夢,並避免你從腳本捆綁中獲得的任何效率。而是將值注入到頁面元素中,然後用jQuery選擇它們。 –
既然你已經擁有'DefaultTexts'的Text屬性,你可以使用javascript'$('#CustomProductText').val($(this).find('option:selected').text())來訪問它。 ;'(你不需要調用控制器方法),但是顯示下拉菜單和另一個元素又有什麼意義呢? –