在 @ Block Razor 中使用 jQuery 变量

use jquery variable in @ block razor

本文关键字:jQuery 变量 Block Razor      更新时间:2023-09-26

我正在 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>

我无法访问变量 ID。这超出了范围。我也尝试过使用 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 );
        }
    }

这行不通。在调试模式下不会命中该操作。

问候

丹尼尔

不适合

您的$.post,您应该在 url 前面加上/符号,它会按预期被击中:

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

解决方案,你不能在剃刀代码中使用javascript变量,因为它不是一种脚本语言。Razor 所做的只是简单地将字符串(无论是 html 还是 javascript 或任何内容)渲染到页面中。

要执行所需的操作,您需要请求服务器将文本传递到您的页面,或者渲染页面中的所有文本,然后在 javascript 中访问这些渲染的内容。