javascript - 在 jquery 的 razor 变量中设置值

标签 javascript jquery asp.net-mvc razor

我有一个观点,我想在 jQuery 的 razor 变量中设置值。 我正在尝试这样

@{
    ViewBag.Title = "Products";
    Layout = "~/Views/Shared/_Layout.cshtml";
    string ip_address = "";
}

<script type="text/javascript">
    $(function () {
        $.get("http://ipinfo.io", function (response) {
            console.log("ip+" + response.ip);
            '@ip_address' = response.ip;

        }, "jsonp");
    });
</script>

但这是抛出一个错误Uncaught ReferenceError: Invalid left-hand side in assignment

最佳答案

你想做的事情在技术上是不可能的 - 正如评论和其他答案已经指出的那样。

总结一下为什么这行不通,Razor 是一个 View 引擎,它使用在页面请求<时在服务器 上执行的 C# 代码/em> 以构建发送到客户端的 HTML 响应

客户端没有对 Razor 变量的引用,并且 Razor View 引擎无法访问 JavaScript 变量 - 尽管它可以在脚本 block 内输出 JavaScript,该脚本 block 在页面加载时设置变量的初始值。

即使 JavaScript 可以访问 Razor 变量,它也只会在页面已传送到客户端设备(通俗地说是浏览器)上的用户代理时执行,而且太晚了 让您在此时进行任何条件渲染、显示/隐藏数据或安全检查,或在 View 中使用变量。

如果您只需要客户端 IP 地址,那么您已经可以通过 UserHostAddress propery of the Request object 在 Controller 中访问它.根据您想做什么,您可以通过 ViewBag 从 Controller 传递它到 View 并呈现它(“您的 IP 地址是...”),或者如果您出于安全目的使用它,请在 Controller 来过滤返回到 View 的操作,或者确定 View 是否应该呈现给用户(业务/领域逻辑通常不应在 View 本身内执行)。

这也意味着您不依赖于第三方服务 - 您的 Web 服务器必须知道请求页面的用户的 IP 地址,因为它使用此地址将响应发送回他们的浏览器。

如果您想要其他只能从浏览器确定的数据,例如页面呈现的“视口(viewport)”(浏览器窗口)的大小 - 您最好的选择是使用 Ajax 请求发送此数据到 No1_Melman 的回答中的 Controller 操作。

关于javascript - 在 jquery 的 razor 变量中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698574/

相关文章:

c# - 具有从字符串到类型的隐式转换的模型绑定(bind)属性

javascript - 什么是下拉 Protractor 代码

javascript - 如何在 angularjs 中格式化取决于区域设置的日期?

jquery - 如何在 Fullcalendar Jquery 中将时间段选择限制为一天?

如果我改变位置,Javascript标签不会运行

c# - Entity Framework 代码第一个对象引用多个对象

javascript - 实现自动完成时出现 "this.source is not a function"错误

javascript - 具有 : auto centering, 适合容器内内容大小的模态容器

javascript - 如果用户在文本字段中输入值并直接按浏览器刷新按钮,onblur 事件不起作用?

html - @Html.EditorFor 中的属性 css