【问题标题】:How to pass string javascript variable to get web.config values如何传递字符串 javascript 变量以获取 web.config 值
【发布时间】:2013-09-03 07:01:34
【问题描述】:

我正在尝试使用以下代码在 MVC 视图中获取 web.config 值。

function GetMinMax(Code) {
    var newCode= Code;
    var minCode =newCode+"MinValue";
    var maxCode =newCode+"MaxValue";

    var minValue = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings[minCode]);
    var maxValue = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings[maxCode]);
    return [minValue, maxValue];
} 

但是,javscript 变量 minCodemaxCode 是未定义的。请告诉我是否有可能实现。

【问题讨论】:

  • 我真的很惊讶为什么我对这段代码投了反对票。当我的以下代码在 document.ready 下完美运行时??? var minRange = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PriceMinRange"]); var maxRange = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["MaxRange"]); var minVal = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["MinSelectedValue"]); var maxVal = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["MaxSelectedValue"]);
  • 我没有否决这个问题,但我猜这样做的人是因为您不了解在服务器和客户端上执行的内容之间的区别。 Javascript 与服务器端代码。恕我直言,这不是投反对票的理由。
  • 你明白了。我知道剃刀允许我们编写嵌入在 JS 或 HTML 视图中的服务器端代码。如果我硬编码AppSettings["MaxSelec‌​tedValue"]。它在这里也很完美。我只是希望它是动态的:(

标签: c# javascript asp.net-mvc razor


【解决方案1】:

您不能直接从 javascript 获取 web.config 值。如果可能的话,那将是一个巨大的安全漏洞。好好想想吧。

如果您想这样做,您必须向服务器发出 AJAX 请求,将您的 javascript 变量 (code) 传递给服务器,然后服务器会在 web.config 中查找配置值并将结果返回给客户:

function GetMinMax(code, callback) {
    var minValueKey = code + 'MinValue';
    var maxValueKey = code + 'MaxValue';

    $.getJSON(
        '/some_controller/some_action', 
        { 
            minValueKey: minValueKey, 
            maxValueKey: maxValueKey 
        }, 
        callback
    );
}

以及您的相应操作:

public ActionResult SomeAction(string minValueKey, string maxValueKey) 
{
    int minValue = int.Parse(ConfigurationManager.AppSettings[minValueKey]);
    int maxValue = int.Parse(ConfigurationManager.AppSettings[maxValueKey]);

    var result = new[] { minValue, maxValue };
    return Json(result, JsonRequestBehavior.AllowGet);
}

以下是您在客户端上使用该功能的方式:

GetMinMax('SomeCode', function(result) {
    // do something with the result here => it will be an array with 2 elements
    // the min and max values
    var minValue = result[0];
    var maxValue = result[1];

    alert('minValue: ' + minValue + ', maxValue: ' + maxValue);
});

【讨论】:

  • 我想知道我的这段代码在 document.ready 下是如何工作的,var minRange = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PriceMin‌​Range"]); var maxRange = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["MaxRange‌​"]); var minVal = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["MinSelec‌​tedValue"]); var maxVal = @Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["MaxSelec‌​tedValue"]);
  • 您的代码在 document.ready 中有效,因为您已经硬编码了传递给 ConfigurationManager 的密钥:System.Configuration.ConfigurationManager.AppSettings["PriceMin‌​‌​Range​"]。注意PriceMin‌​‌​Range 是一个硬编码的字符串。现在查看问题中的代码:System.Configuration.ConfigurationManager.AppSettings[minCode]。看到不同?您作为键传递的这个minCode 是一个javascript 变量。您试图将 javascript 变量传递给在服务器上执行的函数,这绝对没有任何意义。这就是你的代码不起作用的原因
  • 所以我想我确实可以从 javascript 获取 web.config 值 :) 无论如何感谢提供的代码。那么你能告诉我 PriceMin‌​‌​Range 可以是动态的吗?
  • 是的,可以。这正是我在回答中所展示的。你读过它吗?您需要向传递 javascript 值的服务器发出 AJAX 请求。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2020-10-21
  • 1970-01-01
相关资源
最近更新 更多