在@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 中访问呈现的内容。