Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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# 如何删除asp.net mvc3中的子操作_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 如何删除asp.net mvc3中的子操作

C# 如何删除asp.net mvc3中的子操作,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,如何删除asp.net mvc3中的子操作。我的意思是我有部分观点和主要观点。在url栏中,当我进入子页面时,它不应该加载 假设我的主页是 本地主机:5820/Home/Index 然后当我进去的时候 本地主机:5820/Home/Index 然后它应该可以工作,并且子项是 本地主机:5820/主页/关于 然后当我进去的时候 本地主机:5820/主页/关于 那么它就不应该打开了。如何在asp.net mvc中做到这一点。我有几个这样的页面,我已经显示在如何可以页面 我纠正了这个问题事实上,您的A

如何删除asp.net mvc3中的子操作。我的意思是我有部分观点和主要观点。在url栏中,当我进入子页面时,它不应该加载

假设我的主页是

本地主机:5820/Home/Index

然后当我进去的时候

本地主机:5820/Home/Index

然后它应该可以工作,并且子项是

本地主机:5820/主页/关于

然后当我进去的时候

本地主机:5820/主页/关于

那么它就不应该打开了。如何在asp.net mvc中做到这一点。我有几个这样的页面,我已经显示在如何可以页面
我纠正了这个问题

事实上,您的ABOUT页面是主页中的一个链接并不意味着它是一个子操作,事实上,从MVC的角度来看,它们处于同一级别,是您作为一名程序员,通过提供导航命令来实现hiereachies的使用

现在,您可以做的是:

  • 只需从控制器中删除操作方法,或

  • 编写一个简单的忽略路由,如:

    路线。忽略路线(“YourRuleToIgnoreActions”)

  • 此规则应位于RegisterRoutes中RegisterRoutes方法的开头,以避免触发其他规则

    为了建立您的忽略规则,下面是一个关于该主题的精彩讨论:

    更新: 对此可能考虑得太多了,但在我看来,模型可以具有修改视图行为的属性,这是因为从体系结构的角度来看,当您已经在视图中时,您的关注点完全在表示层上,因此我认为具有以下内容是完全有效的:

     public class MyReportsModel{
         public bool displaySection1 { get; set;}
        //other data
     }
    
    在视图中,您可以通过以下方式更改演示文稿:

      @{
       if(@Model.displaySection1){
            //display as normal
        }
    
    }
    
    当然,在填充模型时,应根据需要在每个控制器中设置该属性:

      MyReporstModel thisView = new MyReportsModel();
      thisView.displaySection1 = true;
       // set all properties necessary to display
    
       // if the controller knows that this partial view won't be displayed then 
        thisView.displaySection1 = false;
    
    但这不再是一个技术问题,而是一个架构问题


    希望有帮助,

    看起来您正在查找属性:

    [ChildActionOnly]
    public ActionResult About()
    {
        return View();
    }
    
    public ActionResult Index()
    {
        return View();
    }
    
    [ChildActionOnly]
    public ActionResult About()
    {
        var model = ...
        return PartialView("_About", model);
    }
    
    它禁用了对
    localhost:5820/Home/About
    的直接调用-只有渲染为局部视图才可用

    根据需要进行更新-使用
    ChildActionOnly
    属性标记所有应返回局部视图的操作:

    [ChildActionOnly]
    public ActionResult About()
    {
        return View();
    }
    
    public ActionResult Index()
    {
        return View();
    }
    
    [ChildActionOnly]
    public ActionResult About()
    {
        var model = ...
        return PartialView("_About", model);
    }
    
    在索引视图中,通过以下方式调用这些操作(从
    Home
    controller和其他控制器):


    阿尔瓦多:我刚才举了个例子。我将有不同的控制器,用于不同的查看页面。在主页中,我需要放置部分视图。部分页面不应该像我上面所说的那样加载好吧,我明白了,在这种情况下,您是否尝试在视图中添加一些简单的逻辑来更改该行为,例如,一个名为“isDisplayed”的bool属性,您可以从控制器中填充该属性,因此无论何时调用该部分视图,视图都会知道如何操作,它可以是默认值TRUE,只有在例外情况下,您才将属性设置为FALSE。我认为您的问题是在表示层,因此在我看来,创建一个有用的模型来更改视图的行为是完全有效的。如何设置isDisplayed字段我更新了答案,以防您想听到我对该问题的看法。让我知道你对它的看法:)+1从我的部分,我不知道那一个,当你有不应该被调用的视图时,它非常方便directly@lazyberezovsky正是我需要的。我会解释的。我将有一些主页作为视图创建。因为我使用了5个标签。每个选项卡应包含5个选项卡。5个选项卡将具有5个不同的局部视图。每个部件都有自己的控制器。在控制器中,我将给出index方法[childactiononly]属性。但这是一个例外。我的主要目标是不要在外面打开页面。它只能在选项卡中打开。希望你现在明白了。