Asp.net-Mvc

ASP.NET MVC 控制器參數可選(即 Index(int?id))

  • November 20, 2016

我有以下場景:我的網站顯示文章(由管理員輸入。像部落格一樣)。

所以要查看一篇文章,使用者會被引用到首頁/文章/{文章 ID}。

但是,使用者使用 jsTree 列表從 Articles.aspx 視圖本身中選擇要查看的文章。

所以我需要做的是能夠區分兩種情況:使用者正在訪問特定的文章,或者他只是試圖訪問“主”文章頁面。我嘗試將“Articles”控制器參數設置為可選(int?id),但後來我在“使用”控制器內的 id 值時遇到了問題。

處理這種情況的最佳方式是什麼?也許我只是需要一個更好的邏輯來檢查“url”中是否提供了 id 參數?

我試圖避免使用兩個視圖/控制器,只是出於程式碼重複的原因。

使用單獨的操作,例如:

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

或者將其移動到 Articles 控制器(使用預設路由的 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));
}

我不知道你是否嘗試過這個,但是如果你直接在 URL 中輸入值,那麼,而不是像這樣傳遞它:

控制器/動作/idValue

嘗試像這樣傳遞它:

控制器/動作?id=值

引用自:https://stackoverflow.com/questions/3863678