在@block razor 中使用 jquery 变量
use jquery variable in @ block razor
我正在努力处理 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 语句中我得到了同样的错误:超出范围。
完整的故事是这样的:
在我的页面上,我有一个下拉列表。 select 的项目是默认文本部分的简称。根据 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 );
}
}
这行不通。该操作在调试模式下不会命中。
问候,
丹尼尔
不适合你的$.post
,你应该在url前面加上/
符号,它会按预期命中:
$.post("/Categories/GetDefaultText", { Id: id }, function (data) {
alert(data);
});
至于 razor 解决方案,您不能在 razor 代码中使用 javascript 变量,因为它不是脚本语言。 razor 所做的只是将字符串(可以是 html 或 javascript 或任何内容)渲染到页面中。
要执行您想要的操作,您要么需要请求服务器将文本传递到您的页面,要么呈现页面中的所有文本,然后在您的 javascript 中访问呈现的内容。
我正在努力处理 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 语句中我得到了同样的错误:超出范围。
完整的故事是这样的: 在我的页面上,我有一个下拉列表。 select 的项目是默认文本部分的简称。根据 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 );
}
}
这行不通。该操作在调试模式下不会命中。
问候,
丹尼尔
不适合你的$.post
,你应该在url前面加上/
符号,它会按预期命中:
$.post("/Categories/GetDefaultText", { Id: id }, function (data) {
alert(data);
});
至于 razor 解决方案,您不能在 razor 代码中使用 javascript 变量,因为它不是脚本语言。 razor 所做的只是将字符串(可以是 html 或 javascript 或任何内容)渲染到页面中。
要执行您想要的操作,您要么需要请求服务器将文本传递到您的页面,要么呈现页面中的所有文本,然后在您的 javascript 中访问呈现的内容。