【问题标题】:Assign a Razor Function to a JavaScript Variable?将 Razor 函数分配给 JavaScript 变量?
【发布时间】:2012-12-21 15:11:42
【问题描述】:

我有一个 JavaScript 函数,我想在其中调用 Razor C# Function,我知道这在 HTML 中很容易,但在 JavaScript 中我遇到很多编译错误我尝试了 <text> tag 技巧,但没有任何效果。

getHTML 是我的 JavaScript 函数,getPageSource 是返回字符串的 C# 函数:

<script language="javascript" type="text/javascript">

        function getHTML() {
            var html = "@getPageSource("http://www.google.com")" ;       
            alert(html);
        }

</script>

@getPageSource 在 html 上方定义并且在 HTML 代码中运行良好

有没有办法将一些 Razor 代码分配给 JavaScript 变量?

【问题讨论】:

  • 据我所知,Razor 代码是服务器端代码。您不能从 JavaScript(客户端)执行它

标签: javascript asp.net html razor


【解决方案1】:

您不能在客户端执行服务器端功能。 Razor 仅用于让您在生成要在服务器中返回的 HTML 代码时拥有一些逻辑。

如果这是一个返回字符串的 C# 函数,则应将其括在引号内,否则当浏览器解析您的响应时,它不会被解释为 Javascript 字符串。

var html = '@getPageSource("http://www.google.com")';

请记住,如果您的 getPageSource("http://www.google.com") 返回包含引号的字符串,则 javascript 将不一致,无法创建您的 JS 字符串。想象一下,您的方法返回了&lt;div&gt; ' hello ' &lt;/div&gt;。最终会是这样的:

var html = '<div> ' hello ' </div>';

看到问题了吗?

查看此内容可将 HTML C# 字符串转换为可用作 JS 字符串的字符串。 http://codeasp.net/blogs/raghav_khunger/microsoft-net/722/how-to-escape-single-quotes-in-c-so-that-the-string-can-be-used-in-javascript

您必须将每个 ' 替换为 \\' 。请记住,您的字符串将完全传递给 HTML 代码。想象一下,您的代码正在返回 "It's blue"。在 HTML 中写入时,它将以 var str = 'It's blue' 结尾(请注意,"s blue" 将被视为在字符串之外,并会导致浏览器解析错误)。 要在 JS 中编写它,您需要像 var str = 'It\'s blue' 这样的东西,这样浏览器就会知道引号不是结束字符串引号,而是包含在字符串中。 要在 C# 中包含破折号,您的返回字符串必须是 "It\\'s blue",一旦将 ' 替换为 \\'

【讨论】:

  • 我得到一个 ReferenceError: getHTML is not defined 错误后用引号括起来?
  • 我添加了进一步的解释,可能会导致您的问题
  • 但是 getPageSource 是 C# 还是 Javascript 函数?根据您下面的 cmets,我开始假设它是一个 JS 函数?
  • getPageSource 绝对是 C# 这里它的实现 ' @functions{ string getPageSource(string URL) { System.Net.WebClient webClient = new System.Net.WebClient();字符串 strSource = webClient.DownloadString(URL); webClient.Dispose();返回strSource; } } '
  • 我在最后添加了进一步的解释。
【解决方案2】:

getPageSource() 是 JavaScript 函数还是 C# 函数?

如果是 JavaScript,则不需要前缀 @。如果是 C#,则只需添加引号:

var html = '@getPageSource("http://www.google.com")';

【讨论】:

  • @ 是 Razor 语法的一部分。 getPageSource是服务端函数,@在视图中用于表示后面的字符不是文本,而是函数。
  • 当我按照你说的做时,我会遇到 ReferenceError: getHTML is not defined
  • @Cerbrus 我知道,但句子“...@getPageSource 在 html 上方定义,并且在 HTML 代码中运行良好。”让我觉得它可能甚至是 JavaScript。
  • @user1358763 getPageSource 是什么?发布它的定义!
  • @Adriano: function @test(){alert(1);} --&gt; SyntaxError: Unexpected token ILLEGAL 你不能定义以@ 开头的函数。那个,他用 Razor 标记了这个问题,他特别问 “有没有办法将一些 Razor 代码分配给 Javascript 变量?” 我很确定这是一个 Razor 函数。
猜你喜欢
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多