在@ block razor中使用jquery变量

时间:2015-01-10 20:06:34

标签: javascript jquery asp.net-mvc 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语句中我得到了同样的错误:超出范围。

完整的故事是这样的: 在我的页面上,我有一个下拉列表。要选择的项目是默认文本部分的短名称。根据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 );
        }
    }

这不起作用。在调试模式下,操作不会被触发。

的问候,

丹尼尔

1 个答案:

答案 0 :(得分:0)

不适合您的$.post,您应该在网址前加/个符号,它会按预期点击:

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

对于剃刀解决方案,您不能在剃刀代码中使用javascript变量,因为它不是脚本语言。剃刀所做的只是将字符串(无论是html还是javascript或任何东西)渲染到页面中。

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