在JavaScript中设置Razor变量

3
我正在尝试在JavaScript函数内使用组合框中的内容为razor变量分配值。像这样:

<script type ="text/javascript">
<!--
    function SomeFunction() {

        var hours = document.getElementById("Hours");
        var task = document.getElementById("TaskType_ID");
        @{            
            var tsk = @:task.value;            
         }

        @{            
        <text>
            hours.value = '@ViewBag.TaskTypes.GetHours(tsk)';
        </text>
        }

        return true;
    }

//-->
</script>

这行代码(以及我尝试的其他变体)

var tsk = @:task.value;

会导致错误。


1
好的,你在这里混合了客户端(JavaScript)和服务器端(ASP.NET / Razor)技术,而且它不会以你尝试的形式工作。你需要用AJAX来弥合差距。我猜你有两个组合框,当用户从任务组合框中选择一个选项时,你想要小时组合框中的选项发生变化,我的理解是正确的吗? - Chris Sainty
@RobG Razor是用于创建ASP.NET MVC 3页面的最新语法引擎。 - Chris Sainty
Chris - 正如你所说,OP需要将服务器代码与客户端代码分开,并且应该明确要实现的结果,而不仅仅是发布不起作用的代码。 - RobG
嗨,Chris - 我有一个包含一些任务代码的组合框。在此组合框的onchange事件期间,我想计算一定数量的小时数(从控制器传递的对象中)并将此值放入文本框中。 - TomDW
2个回答

1
正如Chris所指出的那样,您正在混合客户端和服务器端代码。JavaScript是客户端代码,您需要使用ajax调用函数(get/post)从服务器获取数据以返回所需的值。以下是您可以采取的代码片段:
$("#tasks").change(function(){
    $.get('url',$(this).val(), function(data){
        // data is the hours returned from the selected task
        $("#hours").val(data);
    });
});

或者,您可以将任务的值存储在变量中,而不是每次选择任务时都调用服务器。谢谢。


谢谢@Xnake。我会尝试这个方法并告诉大家结果如何。 - TomDW

1

好的,这是我最终做的事情。我不再将一个对象传递到视图中。我添加了一个脚本,绑定到我的第一个字段的更改事件上,然后通过ajax调用我的控制器中的一个操作,并将结果放入第二个字段中。就像这样:

<script type="text/javascript">

    $(document).ready(function () {
        $("#q").change(function () {
            $.ajax({
                type: "GET",
                url: "Home/Test?value=" + $('#q').get(0).value,
                success: function(msg) {
                    $('#x').get(0).value = msg;
                }
            });
        });
    });

</script>

感谢您引导我走向正确的方向。在所有的剃刀语法中,我忽略了这仍然是HTML的事实。希望大家喜欢看我试图把方钉塞进圆孔的过程!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接