检查控制器中的哪个视图方法被调用 ASP.NET MVC

Check from which view method in controller got invoked ASP.NET MVC

有什么方法可以检查 ASP.NET MVC 中哪个视图调用了方法?

例如,我有一个简单的静态方法 returns posts 形成数据库,我有两个视图在做类似的事情,但仍然不一样。 在一个视图中,我列出了登录用户的 post,而在另一个视图中,我显示了所有用户的 post(想象一下,就像 Facebook 页面一样,在墙上你只能看到你的 posts,在 NewsFeed 页面上,您可以看到您的和您的朋友 posts)。

所以我的具体问题是,我可以实现我的方法来做这样的事情吗:

public static List<Post> GetPosts(int BlockNumber, int BlockSize, string id)
        {
            ApplicationDbContext db = new ApplicationDbContext();

            int startIndex = (BlockNumber - 1) * BlockSize;
            var listPosts = db.Posts.ToList();
            if (METHOD INVOKED FROM ProfilePage SHOW ONLY CURRENT USER POSTS)
            {
                listPosts = listPosts.Where(p => p.UserId ==   id).Reverse().ToList();
            }
            else if(METHOD INVOKED FROM NEWSFEED SHOW ALL USERS POSTS)
            {
                listPosts = listPosts.Reverse().ToList();
            }
            var posts = listPosts.Skip(startIndex).Take(BlockSize).ToList();
            return posts;
        }

我的想法是简单地从 NewsFeedController 发送 id 的空字符串,然后检查 id 是否为空显示所有 posts,如果 id 值存在且不为空则仅显示 post s 用于具有该 ID 的用户。我相信那会奏效,但我很感兴趣是否有其他更好的方法来做到这一点。 ASP.NET MVC 和 C# 可以做这样的事情吗?这两个视图在做类似的事情,我想避免不必要的代码冗余。

您可以将 UserId 作为可为空的 int 传递,并从您的控制器以显式方式调用它。我的意思是这样的:

public static List<Post> GetPosts(int BlockNumber, int BlockSize, string id, int? userId)

通过这种方式,您可以获得清晰易读的界面,GetPosts 方法中没有任何 'magic'。

如果您确定要遵循 "known caller" 的想法,您可以在此处阅读有关此主题的更多信息:How can I find the method that called the current method? 然而,这将是进一步使用此代码的噩梦。另外 - 你知道如何测试这样的电话吗?