-1

我有一个 JavaScript 函数,我想在其中调用 a 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>

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

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

4

2 回答 2

5

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

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

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

请记住,如果您的 getPageSource("http://www.google.com") 返回带有引号的字符串,则 javascript 将不一致并且无法创建您的 JS 字符串。想象一下您的方法返回了<div> ' hello ' </div>. 最终会像:

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"一次替换'\\'

于 2012-12-21T15:22:32.147 回答
1

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

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

var html = '@getPageSource("http://www.google.com")';
于 2012-12-21T15:18:36.497 回答