繁体   English   中英

如何在ASP.NET MVC3中删除子操作

[英]How to remove the child action in asp.net mvc3

我如何在asp.net mvc3中删除子操作。 我的意思是我有部分看法和主要看法。 当我进入子页面时,在网址栏中不会加载它。

假设我的主页是

本地主机:5820 /首页/索引

然后当我进入

本地主机:5820 /首页/索引

那么它应该工作,子项是

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

然后当我进入

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

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

看起来您正在寻找ChildActionOnly属性:

[ChildActionOnly]
public ActionResult About()
{
    return View();
}

它禁用对localhost:5820/Home/About直接调用-仅提供部分视图渲染。

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

public ActionResult Index()
{
    return View();
}

[ChildActionOnly]
public ActionResult About()
{
    var model = ...
    return PartialView("_About", model);
}

然后在索引视图中通过以下命令调用这些操作(从Home控制器和其他控制器):

@Html.Action("About", "Home")

您的ABOUT页面是HOME页面中的链接这一事实并不意味着它是子操作,实际上,从MVC的角度来看,它们处于同一个级别,是您作为程序员的错觉通过提供导航顺序。

现在,您可以做的是:

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

  2. 写一个简单的忽略路由,例如:

    route.IgnoreRoute(“ YourRuleToIgnoreActions”);

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

要建立您的忽略规则,这里是有关该主题的精彩讨论: http : //ardalis.com/IgnoreRoute-in-ASP.NET-Routing-is-Order-Dependent

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

 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;

但这不再是技术问题,而是架构问题。

希望能帮助到你,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM