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

如何将值从javascript变量传递给razor变量,是否有可能是asp.net mvc razor视图引擎?

@{ int a = 0; }  var b = ... @a = b;  

你不能。 原因是他们不是在同一时间“活着”。 Razor变量是“服务器端变量”,在页面发送到“客户端”后它们不再存在。

当服务器获取视图请求时,它会创建仅包含HTML,CSS和Javascript代码的视图。 没有留下C#代码,它们都被“翻译”为客户端语言。

当视图仍在服务器上时,Javascript代码DO存在,但它没有意义,只能由浏览器执行(客户端再次执行)。

这就是为什么你可以使用Razor变量来改变HTML和Javascript但反之亦然。 尝试查看您的页面源代码(大多数浏览器中的CTRL + U),那里没有C#代码的迹象。

简而言之:

  1. 服务器获取请求。

  2. 服务器创建“获取”视图,计算并将嵌入在视图中的所有C#代码转换为CSS,Javascript和HTML。

  3. 服务器将视图的客户端版本作为对请求的响应返回给浏览器。
  4. 浏览器呈现页面并执行所有Javascripts

但是如果用一个代替@ html.Hidden字段中的变量,就有可能。 如在这个例子中。

 @Html.Hidden("myVar", 0); 

设置每个脚本的字段:

  

我希望我至少可以提供不小的解决方法。

我看到这个问题已经讨论了一段时间了,但是如果有人再次见到这个问题,这是我的解决方案:

在您的* .cshtml视图文件中:

  

JavaScript变量模型是我需要传递给Razor ViewModel的东西。 它可以使用ajax请求完成。 你只需要在你的动作中有适当的参数,与你在JavaScript中创建的Json对象相匹配。

希望它能帮助别人!

步骤:1你的Html,首先使用javascript将值存储在localstorage中,然后添加如下所示的行,这是你要在html中显示值的地方,我的例子基于boostrap:

  

步骤:2 Javascript

  $('#stringName').replaceWith(localStorage.getItem("itemName")); 

好的,所以这个问题很老……但是我想做类似的事情,我发现了一个适合我的解决方案。 也许它可以帮助别人。

我有一个List ,我填写下拉列表。 我想将该选择放入我在表单中创建的Question对象的QuestionType属性中。 我正在使用Knockout.js进行选择绑定。 这会在用户选择一个时将self.QuestionType knockout observable属性设置为QuestionType对象。

  

我有一个隐藏字段来保存这个对象:

 @Html.Hidden("NewQuestion.QuestionTypeJson", Model.NewQuestion.QuestionTypeJson) 

在observable的订阅中,我将隐藏字段设置为对象的JSON.stringify -ed版本。

 self.QuestionType.subscribe(function(newValue) { if (newValue !== null && newValue !== undefined) { document.getElementById('NewQuestion_QuestionTypeJson').value = JSON.stringify(newValue); } }); 

Question对象中,我有一个名为QuestionTypeJson的字段,当用户选择问题类型时,该字段将被填充。 我使用此字段来获取Question对象中的Question如下所示:

 public string QuestionTypeJson { get; set; } private QuestionType _questionType = new QuestionType(); public QuestionType QuestionType { get => string.IsNullOrEmpty(QuestionTypeJson) ? _questionType : JsonConvert.DeserializeObject(QuestionTypeJson); set => _questionType = value; } 

因此,如果QuestionTypeJson字段包含某些内容,它将反序列化它并将其用于QuestionType ,否则它将仅使用支持字段中的内容。

我基本上’传递’了一个JavaScript对象到我的模型,而不使用RazorAjax调用。 你可以在不使用Knockout.js情况下做类似的事情,但这就是我正在使用的……

Razor View Server Side变量可以使用@读取到客户端JavaScript。而While和JavaScript客户端变量可以使用@读取到Razor View: