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