Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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 MVC中减少ActionResult中的参数数量?_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 如何在ASP.NET MVC中减少ActionResult中的参数数量?

C# 如何在ASP.NET MVC中减少ActionResult中的参数数量?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,有没有其他方法可以提高效率? 创建ActicleType枚举 使用此枚举而不是id的字符串 摆脱ID和idd 将ArticlyType字段添加到Acticles表 按项目类型查询 是的 首先,设置一条路线,以便处理您要查找的内容: public ActionResult Archive(string id, int ids = 0, int idd = 0) { switch (id) { case "News": ViewData["Ar

有没有其他方法可以提高效率?

  • 创建ActicleType枚举
  • 使用此枚举而不是id的字符串
  • 摆脱ID和idd
  • 将ArticlyType字段添加到Acticles表
  • 按项目类型查询
  • 是的

    首先,设置一条路线,以便处理您要查找的内容:

    public ActionResult Archive(string id, int ids = 0, int idd = 0)
    {
        switch (id)
        {
            case "News":
                ViewData["ArtCat"] = "News";
                ids = 1;
                break;
            case "Opinions":
                ViewData["ArtCat"] = "Opinions";
                ids = 2;
                break;
            case "Features":
                ViewData["ArtCat"] = "Features";
                ids = 3;
                idd = 4;
                break;
        }
        var article = from c in _entity.Articles
                        where (c.ArtCatID == ids) || (c.ArtCatID == idd)
                        orderby c.ID
                        select c;
        return View(article);
    }
    
    然后,在动作结果中,可以执行以下操作:

    Route.MapRoute(
        "ArticleArchive"
        "/Article/Archive/{category}/{archiveId}",
        new { controller = Article, action = Archive, category="all", archiveId = UrlParameter.Optional }
    );
    
    您的存储库类实际上应该处理获取文章的问题:

    private _entity = new ArticleRepository();
    public ActionResult Archive(string category, int archiveId)
    {
        var article = entity.GetArticleArchivesByCategoryAndID(category, archiveId);
        return View(article);
    }
    
    公共类存储库
    {
    私有MyEntityContext _entity=new MyEntityContext();
    public IEnumerable GetArticleArchivesByCategoryAndID(字符串类别,字符串id)
    {
    var articles=来自c in_entity.articles
    其中(c.Category==Category&&c.ArtCatID==id)
    orderby c.ID
    选择c;
    归还物品;
    }
    }
    

    不需要
    ViewData
    ,操作结果中也不需要switch语句。这段代码有点不可靠,因为您对
    idd
    ids
    的需求还不清楚。如果您能澄清这一点,这会有所帮助。

    不清楚在内部设置ID和idd时为什么要传入ID和idd。此外,“id”是否可能不是“案例”选项之一?老实说,这是一种荒谬的发问方式。发问速度太慢,以至于你必须提高绩效?你至少应该在帮助自己方面付出比你期望其他人为你所做的更多的努力,特别是对于一个只能真正帮助你的具体案例的问题。这取决于你试图达到的效率类型。如果这段代码真的运行得很慢,那么这可能是由于数据库查询,而与这段代码本身无关——因为代码根本不做太多处理。但就其他人可以使用的可理解代码而言(或者你会记得它在几周内是如何工作的),是的,它的效率要高得多。感谢你编辑和回答,而不是堆积如山。当我需要从一个列表中的两个不同类别获取数据时,我使用了“idd”和“ids”。就像我单击“功能”链接时一样,它需要在同一列表中获取CATID为3或4的数据。@paul那么类别名称“功能”中既有
    Idd=3
    又有
    Ids=4
    ,对吗?如果是这样,您只需将类别名称作为动作结果中的
    字符串
    参数发送回,并使用它即可。
    public class ArticleRepository
    {
        private MyEntityContext _entity = new MyEntityContext();
        public IEnumerable<Article> GetArticleArchivesByCategoryAndID(string category, string id)
        {
            var articles = from c in _entity.Articles
                where (c.Category == category && c.ArtCatID == id)
                orderby c.ID
                select c;
        return articles;
        }
    
    }