asp.net-mvc - ASP.NET MVC Controller 参数可选(即 Index(int?id))

标签 asp.net-mvc controller asp.net

我有以下场景:我的网站显示文章(由管理员输入。如博客)。

因此,要查看文章,用户会被引用到 Home/Articles/{article ID}。

但是,用户可以使用 jsTree 列表从 Articles.aspx View 本身中选择要查看的文章。

所以我需要做的是能够区分两种情况:用户正在访问特定的文章,或者他只是试图访问“主”文章页面。我尝试将“Articles” Controller 参数设置为可选(int?id),但随后我在“使用” Controller 内的 id 值时遇到问题。

处理这种情况的最佳方式是什么?也许我只是需要一个更好的逻辑来检查“url”中是否提供了 id 参数?

我试图避免使用两个 View / Controller ,只是出于代码重复的原因。

最佳答案

使用单独的操作,例如:

public ActionResult Articles() ...
public ActionResult Article(int id) ...

或者将其移动到文章 Controller (使用默认路由的 URL 为:ArticlesArticles/Detail/{id}):

public class ArticlesController : Controller
{
    public ActionResult Index() ...
    public ActionResult Detail(int id) ...
}

如果您仍然必须像您发布的那样使用它,请尝试以下之一:

public ActionResult Articles(int id = 0)
{
     if(id == 0) {
         return View(GetArticlesSummaries());
     }
     return View("Article", GetArticle(id));
}
public ActionResult Articles(int? id)
{
     if(id == null) {
         return View(GetArticlesSummaries());
     }
     return View("Article", GetArticle(id.Value));
}

关于asp.net-mvc - ASP.NET MVC Controller 参数可选(即 Index(int?id)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863678/

相关文章:

asp.net - 将 jQuery 引用放置在 HTML 文档的底部会破坏用户控制

c# - 如何让 kestrel Web 服务器监听非本地主机请求?

asp.net - 我可以在 WebMatrix Beta 2 中设置 Windows 身份验证吗?

asp.net-mvc - 删除客户端验证

asp.net - 将 Linq 数据查询转换为对象类型

asp.net-mvc - 从asp.net mvc Controller 返回一个js文件

security - Symfony $controller->getUser() 在非安全区域的替代方案?

c# - 将 Linq 表达式 "obj => obj.Prop"转换为 "parent => parent.obj.Prop"

asp.net-mvc - 使用基于路由值的 AuthAttribute 安全调整 MVC 站点地图提供程序节点

ruby-on-rails - Rails Controller 中的持久参数