【问题标题】:use jquery variable in @ block razor在 @block razor 中使用 jquery 变量
【发布时间】: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 提取这些值。
  • 既然您已经拥有DefaultTextsText 属性,您可以使用javascript $('#CustomProductText').val($(this).find('option:selected').text()); 访问它(您不需要调用控制器方法)但是显示它的意义何在下拉菜单和另一个元素?

标签: javascript jquery asp.net-mvc razor


【解决方案1】:

$.post 不适合你,你应该在 url 前面加上 / 符号,它会按预期被命中:

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

至于 razor 解决方案,您不能在 razor 代码中使用 javascript 变量,因为它不是脚本语言。 razor 所做的只是将字符串(无论是 html 还是 javascript 或其他任何内容)呈现到页面中。

要执行您想要的操作,您需要请求服务器将文本传递到您的页面或呈现页面中的所有文本,然后在您的 javascript 中访问此呈现的内容。

【讨论】:

  • 在部署到不在域根目录下的 Web 应用程序时,使 URL 绝对化可能不起作用。
  • 添加 / 符号对我有用。谢谢!但是您使用单引号的解决方案不起作用。我仍然收到 id 在当前上下文中不存在的消息。我更喜欢 linq 选项,因为数据已经加载到页面中。你能帮我看看报价吗?我错过了一些特殊的图书馆吗??
  • @danielkaya 我重新阅读了您的问题,您无法从 razor 访问 javascript 变量,请参阅我的更新答案。
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2019-11-12
  • 2020-10-15
相关资源
最近更新 更多