如何将javascript变量的值传递给razor变量?

14 浏览
0 Comments

如何将javascript变量的值传递给razor变量?

如何将JavaScript变量的值传递给Razor变量,在ASP.NET MVC Razor视图引擎中是否可能?

@{

int a = 0;

}

如何从JavaScript变量将值传递给Razor变量,在ASP.NET MVC Razor视图引擎中是否可能?

0
0 Comments

无法从javascript变量传递值给razor变量的原因是它们不在同一时间存在。Razor变量是服务器端变量,在页面发送到客户端后就不再存在了。当服务器收到对视图的请求时,它仅创建包含HTML、CSS和Javascript代码的视图。没有任何C#代码剩下,所有代码都被“翻译”为客户端语言。当视图仍在服务器上时,Javascript代码确实存在,但它是无意义的,只能由浏览器执行(再次是客户端)。这就是为什么您可以使用Razor变量来更改HTML和Javascript,但反之则不行。尝试查看页面源代码(大多数浏览器中的CTRL+U),那里不会有任何C#代码的迹象。

简而言之:

1. 服务器收到请求。

2. 服务器创建或“接受”视图,然后将视图中嵌入的所有C#代码计算和转换为CSS、Javascript和HTML。

3. 服务器将客户端版本的视图作为对请求的响应返回给浏览器(此时不再有C#)。

4. 浏览器渲染页面并执行所有Javascript代码。

解决方法:无法直接将javascript变量的值传递给razor变量,因为它们在不同的环境中运行。但是,可以通过将javascript变量的值传递给表单字段、隐藏字段或AJAX请求的参数来间接传递给服务器端。

0
0 Comments

问题的原因是需要将JavaScript变量的值传递给Razor变量,但是直接在Razor中无法直接访问JavaScript变量。解决方法是使用隐藏字段(Hidden Field)来存储JavaScript变量的值,然后在Razor中通过访问隐藏字段来获取值。

具体的解决方法如下:

1. 在Razor视图中添加一个隐藏字段,例如:.Hidden("myVar", 0);

2. 在JavaScript中定义一个函数,用于设置隐藏字段的值,例如:

<script>
function setMyValue(value) {
     $('#myVar').val(value);       
}
</script>

3. 在需要传递值的地方调用setMyValue函数,将JavaScript变量的值传递给隐藏字段。

4. 在Razor中可以通过访问隐藏字段来获取值,例如:("ActionName", "myVar")

5. 在Razor视图中可以使用JQuery选择器和.val()方法来获取隐藏字段的值,例如:$('#myVar').val();

通过以上方法,就可以实现将JavaScript变量的值传递给Razor变量的需求。

0
0 Comments

问题出现的原因:

这个问题是因为作者想要将JavaScript变量的值传递给Razor变量,但是不知道如何实现。

解决方法:

作者使用了Knockout.js来实现select绑定。在Knockout.js的订阅函数中,作者将隐藏字段的值设置为JavaScript对象的JSON.stringify版本。然后在Question对象中,作者使用QuestionTypeJson字段来获取QuestionType。如果QuestionTypeJson字段包含值,则将其反序列化并将其用于QuestionType属性,否则将使用后端字段中的值。

通过这种方式,作者成功地将JavaScript对象传递给了模型,而不需要使用Razor或Ajax调用。

0