【发布时间】:2015-01-11 04:43:12
【问题描述】:
我在 cshtml 页面中处理 jquery 脚本。简而言之,我的问题是如何在 cshtml 页面的 @ 语句中使用 var?
下面是我正在尝试的示例:
<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>
我无法访问 var id。它超出了范围。我也尝试过使用 for 循环和 if 语句。但是在 if 语句中我得到了同样的错误:超出范围。
完整的故事是这样的: 在我的页面上,我有一个下拉列表。要选择的项目是默认文本部分的短名称。根据 id 或 name,我想在文本框中显示默认文本部分。
#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());访问它(您不需要调用控制器方法)但是显示它的意义何在下拉菜单和另一个元素?
标签: javascript jquery asp.net-mvc razor