首页 > 解决方案 > 找不到asp.net核心页面

问题描述

我的网站上有错误“找不到页面”。

这就是我想出的。

所以第一行很清楚,不需要解释。

第二行:我测试得到这个错误的是我关闭了我的服务器,然后重新启动它。在它之后我尝试去mywebsite.com/User并且错误来了。

第三行:它只发生在控制器中/User/Kalkulator而不发生在/or/Proizvodi

第四行:当我打开控制器/User并多次刷新它时它不会加载但是当我去/然后/User加载它时。

这是我的控制器和他们的观点。我只会提供/User/Kalkulator因为最容易看到会发生什么。

public class UserController : Controller
{
    public IActionResult Index()
    {
        //Debug log are control lines that write to my txt file but they are never reached on first time going to this controller, but when i do fourth step they do reach.
        Debug.Log(null, "User/Index pocetak", Debug.Type.CasualChange, Request);
        try
        {
            Debug.Log(null, "User/Index Checking isLogged", Debug.Type.CasualChange, Request);

            if (Networking.IsLogged(Request))
            {
                Debug.Log(null, "User/Index Checking isAdmin", Debug.Type.CasualChange, Request);
                if (Networking.IsAdmin(Request))
                {
                    Debug.Log(null, "User/Index Return redirect admin", Debug.Type.CasualChange, Request);
                    return Redirect("/Admin?select=POR");
                }
                else
                {
                    Debug.Log(null, "User/Index Return redirect /Proizvodi", Debug.Type.CasualChange, Request);
                    return Redirect("/Proizvodi");
                }
            }
            Debug.Log(null, "User/Index Creting new user class", Debug.Type.CasualChange, Request);

            AR.TDShop.User u = new AR.TDShop.User();
                    Debug.Log(null, "User/Index Return view with user class", Debug.Type.CasualChange, Request);
            return View(u);
        }
        catch (Exception ex)
        {
            Debug.Log(null, "User/Index catch error", Debug.Type.CasualChange, Request);
            return View("Error", ex.ToString());
        }
    }

用户视图

@model AR.TDShop.User
@{
    ViewData["Title"] = "Profi kutak";
}


<style>
    #Login {
        margin: auto;
        position: relative;
        width: 400px;
        text-align: center;
        margin-top: 100px;
        border-radius: 10px;
        border: 1px solid red;
    }

        #Login input {
            margin-top: 10px;
            text-align: center;
            height: 40px;
            font-size: 30px;
            width: 60%;
        }

        #Login button {
            margin-top: 20px;
            margin-bottom: 20px;
            width: 200px;
            height: 40px;
            font-size: 18px;
            border: none;
            background-color: #ff0000;
            border-radius: 0px 0px 20px 20px;
            color: white;
            font-weight: bolder;
        }

            #Login button:hover {
                background-color: #ff4d4d;
            }

    #PostaniClan button:hover {
        background-color: lawngreen !important;
        color: black !important;
    }
</style>
@using (Html.BeginForm("Login", "User", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div id="Login">
        <p style="padding-top: 10px; padding-bottom: 10px; border-radius: 10px 10px 0 0; color: white; background-color: red; font-weight: bolder; font-size: x-large">Logovanje</p>
        @Html.TextBoxFor(x => x.Name, new { @placeholder = "username" })
        <br />
        @Html.TextBoxFor(x => x.PW, new { @placeholder = "password", @type = "password" })
        <br />
        <button type="submit">Potvrdi</button>
    </div>
}
<div style="text-align: center; margin-top: 30px; margin-bottom: 30px" id="PostaniClan">
    <button onclick="window.location.href='/Majstori/Registracija'" style="background-color: green; color: white; border-radius: 20px; padding: 10px 20px 10px 20px;">Postani član!</button>
</div>
}

正如您在user控制器/视图中看到的,这里没有显示其他一些命令,但我认为您不需要它们,当您查看/Kalkulator也不起作用的控制器时您会得到它,这里是:

   public class KalkulatorController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }

这是视图:

@{
        ViewData["Title"] = "Kalkulator";
    }
    <div class="main-wrapper">
        <div class="card bg-info text-center" style="width: 18rem;">
            <div class="card-body">
                <h5 class="card-title">GKP - Plafon</h5>
                <p class="card-text">Izracunajte utrosak materijala koji Vam je potreban za izradu spustenog plafona u gips karton sistemu.</p>
                <a href="#" class="btn btn-primary">Izracunaj!</a>
            </div>
        </div>
        <div class="card bg-info text-center" style="width: 18rem;">
            <div class="card-body">
                <h5 class="card-title">GKP - Zid (oblaganje)</h5>
                <p class="card-text">Izracunajte utrosak materijala koji Vam je potreban za oblaganje postojeceg zida.</p>
                <a href="#" class="btn btn-primary">Izracunaj!</a>
            </div>
        </div>
        <div class="card bg-info text-center" style="width: 18rem;">
            <div class="card-body">
                <h5 class="card-title">GKP - Zid (pregradjivanje)</h5>
                <p class="card-text">Izracunajte utrosak materijala koji Vam je potreban za izradu novog pregradnog zida.</p>
                <a href="#" class="btn btn-primary">Izracunaj!</a>
            </div>
        </div>
    </div>

如您所见,它是纯 HTML,它不起作用....

这是我的/Proizvodi控制器,它可以工作(它有很多命令,所以我将只显示索引和视图)

public IActionResult Index(int? GrupaID, int? PodgrupaID, int? V, string Pretraga)
    {
        ProizvodiModel pm = new ProizvodiModel(GrupaID, PodgrupaID, V, Request);
        pm.Tag = Pretraga;
        return View(pm);
    }

看法:

@model ProizvodiModel
@{
    ViewData["Title"] = "Proizvodi";
    List<Tuple<int, double>> CeneZaKorisnika = new List<Tuple<int, double>>();
    if (Networking.IsLogged(Context.Request))
    {
        CeneZaKorisnika = AR.TDShop.User.GetVPCene(Model.User.UserID);
        CeneZaKorisnika.Sort((x, y) => x.Item1.CompareTo(y.Item1));
    }
    if (!Model.Majstor)
    {
        <style>
            .proizvod {
                margin-bottom: 5px !important;
            }
        </style>
    }
    else
    {
        <style>
            .proizvod {
                margin-bottom: 103px !important;
            }
        </style>
    }
}

<link rel="stylesheet" type="text/css" href="~/css/ProizvodiIndex.css" />
<div class="main-wrapper">
    <div id="left" class="col-sm-3" style=" color: white">
        <div style="width: 100%; margin-top: 40px; margin-bottom: 40px; text-align: center">
            <img src="~/images/Logo_Long.png" style="width: 90%;" />
        </div>
        @if (Model.Majstor)
        {
            Model.User.UcitajPorudzbine(Context.Request);

            if (Model.User.Porudzbine.Count > 0)
            {
                <div style="background-color: red; margin-top: 10px; padding-top: 10px; padding-bottom: 10px">
                    <h3 style="text-align: center; margin: 0;">Skorašnje porudžbine</h3>
                    @{
                        int n = 5;
                        <table id="PorudzbineTable" style="width: 100%;margin-top: 10px; background-color: #ffbbbb; color: black">
                            @foreach (AR.TDShop.Porudzbina p in Model.User.Porudzbine)
                            {
                                <tr onclick="window.location.href='/Porudzbina?ID=' + @p.PorudzbinaID">
                                    <td style="padding-left: 10px">@p.BrDokKom</td>
                                    @switch (p.Status)
                                    {
                                        case AR.TDShop.Porudzbina.PorudzbinaStatus.NaObradi:
                                            <td>Na obradi!</td>
                                            break;
                                        case AR.TDShop.Porudzbina.PorudzbinaStatus.CekaUplatu:
                                            <td>Čeka uplatu!</td>
                                            break;
                                        case AR.TDShop.Porudzbina.PorudzbinaStatus.ZaPreuzimanje:
                                            <td>Za preuzimanje!</td>
                                            break;
                                        case AR.TDShop.Porudzbina.PorudzbinaStatus.Preuzeto:
                                            <td>Realizovano!</td>
                                            break;
                                        case AR.TDShop.Porudzbina.PorudzbinaStatus.Stornirana:
                                            <td>Stornirano!</td>
                                            break;
                                    }
                                </tr>

                                n--;
                                if (n <= 0)
                                {
                                    break;
                                }
                            }
                        </table>
                        <button id="SvePorudzbine" onclick="window.location.href='/User/Porudzbine'" style="text-align: center; margin-top: 10px; background-color: white; color: black">Sve porudzbine</button>
                    }
                </div>
            }
            <div id="ObjasnjenjeCene">
                <p>Cena bez PDV-a je iskazana crvenom bojom!</p>
            </div>
        }
        <div style="padding: 15px; background-color: #5a5cd4; margin-bottom: 40px">
            <button class="@if (@Model.ActivateGrupa == null && Model.ActivatePodgrupa == null) { @Html.Raw("activate") }" onclick="GoTo('/Proizvodi')">Svi proizvodi</button>


            @foreach (GrupaModel g in Model.Grupe)
            {
                <button class="@if (Model.ActivateGrupa != null && Model.ActivateGrupa == g.GrupaID)
                {
                    @Html.Raw("activate")
                } else if (@Model.ActivatePodgrupa != null)
                {
                    if(PodgrupaModel.GetParent((int)Model.ActivatePodgrupa) == g.GrupaID) { @Html.Raw("activate") }
                }"
                        onclick="GoTo('/Proizvodi?GrupaID=@g.GrupaID')">
                    @g.Naziv
                </button>
            }
        </div>
        <div id="PredloziProizvod" style="border-top: black 2px; color: black;">
            <button id="predloziButton" style="width: 100%; text-align: center">Predloži proizvod</button>
            <input hidden type="text" placeholder="Naziv proizvoda" />
            <input hidden type="text" placeholder="Kataloski broj" />
            <input hidden type="text" placeholder="Opis primene" />
            <button hidden id="PosaljiPredlogProizvoda">Posalji</button>
        </div>
    </div>

    <div id="right" class="col-sm-9">

        <div id="PretragaProizvoda">
            <input type="text" placeholder="Pretraga..." value="@Model.Tag" />
            <button id="tw" style="float: right" onclick="ToggleView(this)" value="0"><img src="~/images/View2.png" style="width: 25px" /></button>
        </div>
        <br />
        @if (Model.PodGrupe.Count > 0)
        {
            string cls = "";
            if (Model.ActivatePodgrupa == null)
            {
                cls = "aktivnaPodgrupa";
            }
            <div id="PodGrupe">
                <button class="PodGrupa @cls" onclick="GoTo('/Proizvodi?GrupaID=@PodgrupaModel.GetParent((int)Model.PodGrupe[0].PodgrupaID))'">
                    <p>Svi proizvodi grupe</p>
                </button>
                @foreach (PodgrupaModel pgm in Model.PodGrupe)
                {
                    cls = "";
                    if (pgm.PodgrupaID == Model.ActivatePodgrupa)
                    {
                        cls = "aktivnaPodgrupa";
                    }
                    <button class="PodGrupa @cls" onclick="GoTo('/Proizvodi?PodgrupaID=@pgm.PodgrupaID')">
                        <p>@pgm.Naziv</p>
                    </button>
                }
            </div>
            <hr style="border-bottom: 2px solid black" />
        }
        @foreach (ProizvodModel p in Model.Proizvodi)
        {
            if (p.Aktivan)
            {
                string proizvodStil;
                string buttonStil;

                if (p.Klasifikacija == 0)
                {
                    proizvodStil = "color: dimgray;";
                    buttonStil = "background: linear-gradient(to bottom, white, dimgray 20%, dimgray 80%, white 100%);";
                }
                else if (p.Klasifikacija == 2)
                {
                    proizvodStil = "color: darkorange;";
                    buttonStil = "background: linear-gradient(to bottom, white, darkorange 20%, darkorange 80%, white 100%);";
                }
                else
                {
                    proizvodStil = "color: darkgreen;";
                    buttonStil = "background: linear-gradient(to bottom, white, darkgreen 20%, darkgreen 80%, white 100%);";
                }

                <div class="proizvod ppppp @if (Model.Majstor) { @Html.Raw("korpa"); } normal"
                     @Html.Raw("onclick = \"GoToP('" + @p.ROBAID + "')\"") ;
                     style="@proizvodStil">
                    <p class="katBr">@p.KatBr</p>
                    <img src="@p.Slika" />
                    <p class="nazivProizvoda">@p.Naziv</p>
                    @if (Model.Majstor)
                    {
                        try
                        {
                            int NivoZaKorisnika = Model.User.Cenovnik_grupa.Where(x => x.Item1 == p.Cenovnik_GrupaID).Select(t => t.Item2).FirstOrDefault();
                            double VPCena = CeneZaKorisnika.Where(x => x.Item1 == p.ROBAID).FirstOrDefault().Item2;
                            double MPCena = VPCena + (VPCena * p.PDV / 100);

                            if (MPCena > 0)
                            {
                                <p class="vpcena">@VPCena.ToString("#,###.00") / @p.JM</p>
                                <p class="mpcena">@MPCena.ToString("#,###.00") / @p.JM</p>
                                if (Model.User.Vrsta == UserModel.Tip.Majstor)
                                {
                                    <button style="@buttonStil" onclick="GoToP(@p.ROBAID); event.stopPropagation();"> KUPI!</button>
                                }
                            }
                            if (Model.User.Vrsta == UserModel.Tip.Administrator)
                            {
                                <button style="@buttonStil" onclick="Edit(@p.ROBAID); event.stopPropagation();">Detalji!</button>
                            }
                        }
                        catch (Exception ex)
                        {
                            @:alert("@ex.ToString()");
                        }
                    }
                </div>
            }
        }
    </div>
</div>

<div id="AlertPopUp">
</div>
<script src="~/js/AlertBox.js"></script>
<script>

    var alb = new AlertBox($("#AlertPopUp"));


    var currRID = -1;
    var overwrite = false;

    function GoTo(link) {
        if ($("#tw").val() == 1) {
            if (link.indexOf('?') > -1) {
                window.location.href = link + "&V=1";
            }
            else {
                window.location.href = link + "?V=1";
            }
        }
        else {
            window.location.href = link;
        }
    }

    function GoToP(link) {
        if ($("#tw").val() == 1) {
            if (link.indexOf('?') > -1) {
                window.location.href = link + "&V=1";
            }
            else {
                window.location.href = link + "?V=1";
            }
        }
        else {
            window.location.href = "/Proizvod?ID=" + link;
        }
    }

    function Edit(id) {
        GoTo("/Proizvodi/Edit?ID=" + id);
    }

    function ToggleView(element) {
        var curr = $(element).val();
        if (curr == 1) {
            $(element).val(0);
            $(element).children("img").attr("src", "/images/View2.png");
            $(".ppppp").removeClass("proizvod1");
            $(".ppppp").addClass("block");
            $(".ppppp").addClass("proizvod");
            $(".korpa button").html("Dodaj u korpu!");
        }
        else {
            $(element).val(1);
            $(element).children("img").attr("src", "/images/View1.png");
            $(".ppppp").removeClass("proizvod");
            $(".ppppp").removeClass("block");
            $(".ppppp").addClass("proizvod1");
            $(".korpa button").html("<img src='/Images/cart.png' style='height: 50px;width: 50px;border-radius: 10px;padding: 5px;padding-right: 8px;background-color: #2196F3;' />");
        }
    }

    @{
        if(Model.View == 1)
        {
            @:StartOtherView();
        }
    }

    function StartOtherView() {
        $("#tw").val(1);
        $("#tw").children("img").attr("src", "/images/View1.png");
        $(".ppppp").removeClass("proizvod");
        $(".ppppp").removeClass("block");
        $(".ppppp").addClass("proizvod1");
        $(".korpa button").html("<img src='/Images/cart.png' style='height: 50px;width: 50px;border-radius: 10px;padding: 5px;padding-right: 8px;background-color: #2196F3;' />");
    }

    $(function () {
        var PredloziProizvodBlock = false;
        $("#predloziButton").click(function () {
            $(this).parent().children("input").each(function () {
                if (PredloziProizvodBlock == true) {
                    $(this).hide();
                }
                else {
                    $(this).show();
                }
            });
            if (PredloziProizvodBlock == true) {
                $("#PosaljiPredlogProizvoda").hide();
            }
            else {
                $("#PosaljiPredlogProizvoda").show();
            }
            PredloziProizvodBlock = !PredloziProizvodBlock;
        })

        $("#PosaljiPredlogProizvoda").click(function () {
            $.ajax({
                type: "GET",
                url: "/Proizvodi/PosaljiPredlogProizvoda",
                contentType: "application.json; charset-utf-8",
                dataType: "json",
                async: false,
                success: function (data) {
                    alert(data);
                },
                error: function (data) {
                    alert(data);
                }
            });
        })

        $("#PretragaProizvoda input").keyup(function () {
            var input = $(this).val().toUpperCase();
            $(".proizvod").each(function () {
                if ($(this).html().toUpperCase().indexOf(input) >= 0 || input.length == 0) {
                    $(this).show();
                }
                else {
                    $(this).hide();
                }
            });
        });
    });
</script>

所有视图都使用相同的布局。

路由选项:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

标签: asp.net-mvcasp.net-core

解决方案


我发现了错误,这很容易。

我以为我正在检查进入某个页面时运行的所有代码,但我忘记了一大部分,它是构造函数:

private readonly IHostingEnvironment hostingEnvironment;
public ProizvodiController(IHostingEnvironment he)
{
    hostingEnvironment = he;
    Program.AbsolutePath = hostingEnvironment.WebRootPath;
    Debug.FilePath = Path.Combine(Program.AbsolutePath, "Log");
}

public IActionResult Index(int? GrupaID, int? PodgrupaID, int? V, string Pretraga)
{
    ProizvodiModel pm = new ProizvodiModel(GrupaID, PodgrupaID, V, Request);
    pm.Tag = Pretraga;
    return View(pm);
}

我忘记了每次从控制器访问任何页面时都会访问构造函数,它会设置我 AbsolutePath稍后使用的变量。

当我重新启动服务器时,他会丢失所有内存数据(这是静态变量AbsolutePath),并且仅在任何用户进入网站时才设置,但由于我仅在 2 个控制器中调用它,因此其他控制器无法正常工作。

解决方案是向所有控制器构造函数添加相同的代码。


推荐阅读