可选参数必须是引用类型,可空类型,或者声明为可选参数

时间:2014-07-28 13:28:49

标签: dictionary parameters nullable controllers

我对此代码感到震惊,每当我试图查看文章列表时,我都会收到此错误。 错误是参数字典包含articleId中方法System.Int32的非可空类型System.Web.Mvc.ActionResult Detail(Int32)的参数Crossroads.Controllers.ArticleController的空条目。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数。

这是控制器:

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);
    }
}

}

这是我的索引

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

0 个答案:

没有答案