如何从JavaScript文件访问c#变量?

时间:2018-08-01 12:18:22

标签: javascript c#

我有一个C#文件,可从不同的配置文件中提取各种配置设置。我正在编写的JavaScript应用程序需要其中一些设置才能运行。我在将C#变量引入js文件时遇到麻烦。不确定什么是最好的方法。它们需要最终作为页面上的JS对象。是否将它们添加到C#文件中的JSon对象并从JS文件中调用它起作用?说实话,我什至不知道该怎么做。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

您只需在一个根页面(例如_layout.cshtml)中声明一个全局变量:

<script>
    var settings = {
        foo: @(IsFoo ? "true", "false"),
        bar: @SomeNumber,
        baz: "@ImportantString"
    }
</script>

或者,如果您正在编写Web API,则只需添加一个/settings端点即可进行查询(假设您使用的是jQuery):

$.get("/settings", response => {
    // Store the `response` in a global variable.
});

答案 1 :(得分:-1)

如果这是一个独立的javascript项目,而.net更像是一个API,则需要进行API调用,以向您发送那些配置设置。

如果您的JavaScript是.net MVC应用程序的一部分,即您是通过.cshtml / .aspx文件的结尾处的标记添加JavaScript,则可以轻松地将其通过全局变量传递,但是即使这样C#代码需要将这些值通过Modal传递到.cshtml / aspx文件。

您可以做的是:

var pageConfig = pageConfig || {};
pageconfig.settings = @Html.Raw(Model.Settings); // This model object is part of the C# code and my assumption is that Settings will have array of configurations.

这也可以全局完成,具体取决于C#代码的编写方式。

答案 2 :(得分:-2)

假设当您说“各种配置设置”时,是指.NET的ApplicationSettings(在Visual Studio的“属性”>“设置”中定义),我们以通用的方式做了类似的操作,如下所示:

public void WriteSettings(TextWriter writer) 
{
    // Declare the nameSpace for the DLL you want to pull settings from
    var nameSpace = "foo.Bar"
    ApplicationSettingsBase properties = (System.Configuration.ApplicationSettingsBase)Activator.CreateInstance(nameSpace, string.Format("{0}.Properties.Settings", nameSpace)).Unwrap();
    foreach (SettingsProperty property in properties.Properties) 
    {
        writer.Write(string.Format("{0}=\"{1}\", property.Name, properties[property.Name]);
    }
}

在您的情况下,我已经忽略了一些问题:

  • 我没有费力尝试处理非字符串;考虑查看property.PropertyType并适当地投射您的价值观
  • 我将其包装在接受TextWriter的函数中;您可以通过此方法Response.Output