Dictionary 可选参数必须是引用类型、可为null的类型或声明为可选参数

Dictionary 可选参数必须是引用类型、可为null的类型或声明为可选参数,dictionary,parameters,nullable,controllers,Dictionary,Parameters,Nullable,Controllers,我被这段代码震惊了,每当我试图查看文章列表时,我都会遇到这个错误。 错误在于参数字典包含不可为空的类型System.Int32的参数articleId,方法System.Web.Mvc.ActionResult Detail(Int32)的Crossroads.Controllers.ArticleController的空条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数 这是控制器: using System; using System.Collections.

我被这段代码震惊了,每当我试图查看文章列表时,我都会遇到这个错误。 错误在于参数字典包含不可为空的类型
System.Int32
的参数
articleId
,方法
System.Web.Mvc.ActionResult Detail(Int32)
Crossroads.Controllers.ArticleController
的空条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数

这是控制器:

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Security;
using Crossroads.Models;
using System.Linq;
using System.Web;
using Crossroads.Models.Repositories;


namespace Crossroads.Controllers
{
   [HandleError]
   public class ArticleController : BaseController
   {
    private IArticleRepository _ArticleRepository;

    public ArticleController()
        : this(new ArticleRepository())
    { }

    public ArticleController(IArticleRepository articleRepo)
    {
        _ArticleRepository = articleRepo;
    }

    public ActionResult Index(bool? archived)
    {
        if (archived != null && archived.Value.Equals(true))
        {
            return View("IndexArchived", _ArticleRepository.ListArchivedArticles());
        }
        else
        {
            return View(_ArticleRepository.ListArticles());
        }
    }

    public ActionResult Detail(int Id)

        {
            var article = _ArticleRepository.GetArticle(Id);

            if (article.Published)
            {
                return View("Details", article);
            }
            else
            {
                postStatus = new PostStatusViewModel()
                {
                    Status = Status.Warning,
                    Message = "I'm sorry, article " + article.Title + " has been deleted. <br />Please update your bookmark."
                };
                return RedirectToAction("PostStatus", postStatus);
            }
        }

    public ActionResult Details(int id, string articleTitle)
    {
        return RedirectToAction("Detail", id); 
    }

    [Authorize(Roles = "Manager")]
    public ActionResult New()
    {
        return View("New", new Articles());
    }

    [Authorize(Roles = "Manager")]
    [ValidateInput(false)]
    public ActionResult Edit(int id)
    {
        var viewModel = _ArticleRepository.GetArticle(id);
        return View(_ArticleRepository.GetArticle(id));
    }

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateAntiForgeryToken]
    [ValidateInput(false)]
    [Authorize(Roles = "Manager")]
    public ActionResult Create(Articles model)
    {
        try
        {
            model.CreatedBy = Membership.GetUser().UserName;
            model.CreatedDate = DateTime.Now;
            model.ModifiedBy = Membership.GetUser().UserName;
            model.ModifiedDate = DateTime.Now;
            _ArticleRepository.CreateArticle(model);
            return RedirectToAction("Index");
        }
        catch
        {
            return View("Edit", model.Id);
        }
    }

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateAntiForgeryToken]
    [ValidateInput(false)]
    [Authorize(Roles = "Manager")]
    public ActionResult Update(Articles model)
    {
        try
        {
            model.ModifiedBy = Membership.GetUser().UserName;
            model.ModifiedDate = DateTime.Now;
            _ArticleRepository.EditArticle(model);
            return RedirectToAction("Details", new { id = model.Id });
        }
        catch (Exception ex)
        {
            _DBLogging.LoggError(ex);
            postStatus = new PostStatusViewModel()
            {
                Status = Status.Error,
                Message = ""
            };
            return View("Edit");
        }
    }

    public JsonResult ManageArchiveArticle(int articleId, bool isArchived)
    {
        var result = new Dictionary<string, string>();
        try
        {
            var article = _ArticleRepository.GetArticle(articleId);
            article.IsArchived = isArchived ? false : true;
            article.ModifiedBy = Membership.GetUser().UserName;
            article.ModifiedDate = DateTime.Now;
            if (article.IsArchived) article.ArchiveDate = DateTime.Now;
            article = _ArticleRepository.EditArticle(article);
            result.Add("isArchived", article.IsArchived.ToString().ToLower());
        }
        catch (Exception ex)
        {
            _DBLogging.LoggError(ex);
        }
        return Json(result);
    }

    public JsonResult ManagePublishArticle(int articleId, bool isPublished)
    {
        var result = new Dictionary<string, string>();
        try
        {
            var article = _ArticleRepository.GetArticle(articleId);
            article.Published = isPublished ? false : true;
            article.ModifiedBy = Membership.GetUser().UserName;
            article.ModifiedDate = DateTime.Now;
            article = _ArticleRepository.EditArticle(article);
            result.Add("isPublished", article.Published.ToString().ToLower());
        }
        catch (Exception ex)
        {
            _DBLogging.LoggError(ex);
        }
        return Json(result);
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Web.Mvc;
使用System.Web.Security;
使用十字路口。模型;
使用System.Linq;
使用System.Web;
使用Crossroads.Models.Repositories;
名称空间交叉点.控制器
{
[手机错误]
公共类ArticleController:BaseController
{
私人档案库;
公共物品控制员()
:此(新的ArticleRepository())
{ }
公共物品控制员(IArticleRepository articleRepo)
{
_ArticleRepository=articleRepo;
}
公共行动结果索引(bool?存档)
{
if(存档!=null&&archived.Value.Equals(true))
{
返回视图(“IndexArchived”,_ArticleRepository.ListArchivedArticles());
}
其他的
{
返回视图(_ArticleRepository.ListArticles());
}
}
公共行动结果详细信息(int Id)
{
var article=\u articlepository.GetArticle(Id);
国际单项体育联合会(已发表文章)
{
返回视图(“详细信息”,第条);
}
其他的
{
postStatus=新的PostStatusViewModel()
{
状态=状态。警告,
Message=“对不起,文章”+文章.标题+“已被删除。
请更新您的书签。” }; 返回重定向到操作(“PostStatus”,PostStatus); } } public ActionResult详细信息(int id、string articleTitle) { 返回重定向操作(“详细信息”,id); } [授权(Roles=“Manager”)] 公共行动结果新() { 返回视图(“新建”,新文章()); } [授权(Roles=“Manager”)] [验证输入(错误)] 公共操作结果编辑(int id) { var viewModel=\u article repository.GetArticle(id); 返回视图(_ArticleRepository.GetArticle(id)); } [接受动词(HttpVerbs.Post)] [ValidateAntiForgeryToken] [验证输入(错误)] [授权(Roles=“Manager”)] 公共行动结果创建(文章模型) { 尝试 { model.CreatedBy=Membership.GetUser().UserName; model.CreatedDate=DateTime.Now; model.ModifiedBy=Membership.GetUser().UserName; model.ModifiedDate=DateTime.Now; _ArticleRepository.CreateArticle(模型); 返回操作(“索引”); } 接住 { 返回视图(“编辑”,model.Id); } } [接受动词(HttpVerbs.Post)] [ValidateAntiForgeryToken] [验证输入(错误)] [授权(Roles=“Manager”)] 公共行动结果更新(文章模型) { 尝试 { model.ModifiedBy=Membership.GetUser().UserName; model.ModifiedDate=DateTime.Now; _ArticleRepository.EditArticle(模型); 返回RedirectToAction(“Details”,new{id=model.id}); } 捕获(例外情况除外) { _DBLogging.LoggError(ex); postStatus=新的PostStatusViewModel() { 状态=状态。错误, Message=“” }; 返回视图(“编辑”); } } public JsonResult ManageArchiveArticle(int-articleId,bool-isArchived) { var result=newdictionary(); 尝试 { var article=\u articlepository.GetArticle(articleId); article.IsArchived=IsArchived?false:true; article.ModifiedBy=Membership.GetUser().UserName; article.ModifiedDate=DateTime.Now; 如果(article.IsArchived)article.ArchiveDate=DateTime.Now; article=\u ArticleRepository.EditArticle(article); 添加(“isArchived”,article.isArchived.ToString().ToLower()); } 捕获(例外情况除外) { _DBLogging.LoggError(ex); } 返回Json(结果); } public JsonResult ManagePublishArticle(int-articleId,bool-isPublished) { var result=newdictionary(); 尝试 { var article=\u articlepository.GetArticle(articleId); article.Published=isPublished?false:true; article.ModifiedBy=Membership.GetUser().UserName; article.ModifiedDate=DateTime.Now; article=\u ArticleRepository.EditArticle(article); result.Add(“isPublished”,article.Published.ToString().ToLower()); } 捕获(例外情况除外) { _DBLogging.LoggError(ex); } 返回Json(结果); } }
}

这是我的索引

<ul class="menu">
    <li><%= Html.ActionLink("Article List", "Index", "Article")%></li>
    <li><%= Html.ActionLink("New Article", "New", "Article")%></li>
</ul>