Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法确定作为应用程序运行的站点的根目录_C#_Jquery_Asp.net Mvc - Fatal编程技术网

C# 有没有办法确定作为应用程序运行的站点的根目录

C# 有没有办法确定作为应用程序运行的站点的根目录,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我有一个MVC4网络应用程序(http://whatever/myapp/home/someprocess)作为一个单独的应用程序在默认网站(服务器上)下运行,在不同的地方,我需要引用从根开始的文件,主要是javascript(root=http://whatever/myapp/) answer中的window.location选项和其他选项不适用于我,因为它获取基本url,即http://whatever/而不是http://whatever/myapp/ 从上面的答案中摘录: •windo

我有一个MVC4网络应用程序(
http://whatever/myapp/home/someprocess
)作为一个单独的应用程序在默认网站(服务器上)下运行,在不同的地方,我需要引用从根开始的文件,主要是javascript(root=
http://whatever/myapp/

answer中的window.location选项和其他选项不适用于我,因为它获取基本url,即
http://whatever/
而不是
http://whatever/myapp/

从上面的答案中摘录:

•window.location.host:您将获得sub.domain.com:8080或sub.domain.com:80
•window.location.hostname:您将获得sub.domain.com
•window.location.protocol:您将获得http:
•window.location.port:您将获得8080或80
•window.location.origin:您将获得

我不想手动附加“myapp”部分的原因是每次在express调试模式下运行它时都需要更改它。我肯定错过了一些简单的事情

在我的电脑上调试时,它应该实现
http://localhost:someport/home/someprocess/
当发布到服务器时,它应该实现
http://server/myapp/home/someprocess

我目前正在处理的一行代码:

var jqxhr = $.getJSON("/myapp/AutoComplete/LoadComboData", { classname: '@ViewBag.ClassName', functionname: '@ViewBag.MethodName', searchstring: value, context: contextvalue, assembly: '@ViewBag.AssemblyName' })

@*var jqxhr = $.getJSON("/AutoComplete/LoadComboData", { classname: '@ViewBag.ClassName', functionname: '@ViewBag.MethodName', searchstring: value, context: contextvalue, assembly: '@ViewBag.AssemblyName' })*@

正如您在VS2013中调试时所看到的,我注释掉了顶部的一个,而在部署应用程序时,我必须确保注释掉底部的一个。必须有更好的方法吗?

解决方案1:

更好的方法是在IIS上进行本地调试

项目属性中
=>
Web选项卡

服务器
下,从下拉列表中选择
本地IIS
,然后设置正确的
项目URL
http://localhost/myapp
)。然后创建虚拟目录

这样,在调试时就不必在这两行之间切换

解决方案2:

作为旁注,您可以使用
IsDebuggingEnabled
属性,然后相应地将值分配给
jqxhr
。修改
system.web.compilation
元素上的
debug
属性以在两种不同模式之间切换

var jqxhr = []
@if (!HttpContext.Current.IsDebuggingEnabled)
{
   jqxhr = $.getJSON("/myapp/AutoComplete/LoadComboData", { classname: '@ViewBag.ClassName', functionname: '@ViewBag.MethodName', searchstring: value, context: contextvalue, assembly: '@ViewBag.AssemblyName' }) 
}
else
{
    jqxhr = $.getJSON("/AutoComplete/LoadComboData", { classname: '@ViewBag.ClassName', functionname: '@ViewBag.MethodName', searchstring: value, context: contextvalue, assembly: '@ViewBag.AssemblyName' })
}
解决方案3:

在MVC项目中创建一个扩展,无论是否满足条件调试符号,它都会返回bool

public static bool IsDebug(this HtmlHelper htmlHelper)
    {
#if DEBUG
      return true;
#else
      return false;
#endif
    }
CSHTML:

var jqxhr = []
@if (!Html.IsDebug())
{
   jqxhr = $.getJSON("/myapp/AutoComplete/LoadComboData", { classname: '@ViewBag.ClassName', functionname: '@ViewBag.MethodName', searchstring: value, context: contextvalue, assembly: '@ViewBag.AssemblyName' }) 
}
else
{
    jqxhr = $.getJSON("/AutoComplete/LoadComboData", { classname: '@ViewBag.ClassName', functionname: '@ViewBag.MethodName', searchstring: value, context: contextvalue, assembly: '@ViewBag.AssemblyName' })
}
解决方案23将需要您更改
web.config
中的属性,或者在
调试
/
发布
之间更改配置。不过,我建议采用第一种解决办法。我用过这个,效果很好。您甚至消除了一种可能的情况,即一件事可以在Express Web服务器上工作,但不能在IIS上工作(这会让您感到头疼):-)


解决方案2和3的源代码:

为什么不在IIS上运行时进行调试?效果很好谢谢scheien!我认为可以得到应用程序运行的虚拟目录,因此代码是动态的,但这似乎不可能?如果站点从myapp移动到myapp2,我无论如何都必须更改代码,至少现在只更改一次。;-)谢谢欢迎你的朋友。我刚刚重写了另外两种可能的方法,但第一种是最好的。很高兴你成功了,干杯!:-)