首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用设置和应用构建事件中的ASP.NET参数/变量

问应用设置和应用构建事件中的ASP.NET参数/变量
EN

Stack Overflow用户
提问于 2020-07-10 02:33:28
回答 1查看 91关注 0票数 2

在ASP.NET中,我们有应用程序设置,还有应用程序构建前/构建后事件。是否可以访问Pre Build事件中的设置?或者,是否可以从Pre Build事件注入设置的值?

完整的上下文:

我在ASP.NET 4Web应用程序中嵌入了一个Angular应用程序。也就是说,我的应用程序结构是这样的:

代码语言:javascript
复制
+ Solution
| - Project
|   + Properties
|   + AngularApp
|   | + dist
|   | + e2e
|   | + src
|   | - (etc)
|   + App_Start
|   + Model
|   + Global.asax
|   - Web.config
- ProjectTest

我有一些URL重写规则,这样任何不指向我的控制器的请求website.com/x都会被重定向到website.com/AngularApp/dist/AngularApp/x。到目前为止,我所描述的一切都运行得很好。

问题是,这个应用程序没有被部署到域的根目录;它被部署到域的一个子目录中。(即用website.com/app代替website.com)。我的应用程序的三个不同部分需要知道这个新的子目录应该被认为是根目录- Angular应用程序需要将其配置为根目录,重写规则需要合并这个根目录,并且某些C#代码也需要知道这个新的根目录(我将在这里为您保存详细信息)。目前,我必须在预编译事件(构建Angular应用程序)和Web.config (控制我的重写规则)和设置(通过我前面提到的C#代码访问)中指定此子目录。如果我能有一个单一的配置,它们都能从中提取出来,那就更好了。我上面的问题至少允许将这三种不同的配置中的两种组合在一起。

EN

回答 1

Stack Overflow用户

发布于 2020-07-15 22:19:42

我的建议不是做任何构建事件,而是用托管ASP视图的一些值来引导你的angular应用程序。如果我对你的应用布局理解正确的话,你也许可以把一些变量作为普通的javascript推送到Razor视图中,它会在启动时被Angular拾取。

模型

代码语言:javascript
复制
public class SampleViewModel
{
    public string Path { get; set; }
}

控制器

代码语言:javascript
复制
public class HomeController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        return View(new SampleViewModel() { Path = "/app/1/test" });
    }
}

视图

代码语言:javascript
复制
@model HelloWorldMvcApp.SampleViewModel
@{
    Layout = null;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.min.js"></script>
</head>
    
<body>
    <h1>Server-side path @Model.Path</h1>
    <hr/>
    <div ng-app="myApp">
        <div ng-controller="MyController">
            <h1>{{message}}</h1>
        </div>
    </div>
    <script type="text/javascript">
        var clientSidePath = "@Model.Path"; @* Razor happily renders values into javascript blocks *@
        var app = angular.module('myApp', []);
        app.controller('MyController', function($scope) {
            $scope.message = 'Client-side path ' + clientSidePath;
        });
    </script>
</body>
</html>

绝对最小的Dotnet小提琴:https://dotnetfiddle.net/pO2wHN。为了简单起见,我选择了AngularJS (这可能不是您使用的确切版本),但类似的方法也应该适用于最近的Angular。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62821465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档