Это ошибка ASP.NET MVC 2 Preview 1, и какой обходной путь? - PullRequest
3 голосов
/ 07 августа 2009

Я использую этот код в ASP.NET MVC 2 preview 1:

    public ActionResult List(long id, [DefaultValue(0)] long? commentId)
    {
        var model = UserComment.ForRefId(id);
        PageTitle = string.Format("Comments for '{0}'", 
                                  SetCommentThread(id).Subject);
        ViewData[MvcApplication.SAnchor] = commentId;
        return View("List", model);
    }

Когда я использую действительный аргумент URL, такой как "/ Comment / List / 22638", я получаю ошибку:

Словарь параметров содержит неверная запись для параметра 'commentId' для метода «System.Web.Mvc.ActionResult Список (Int64, System.Nullable 1[System.Int64])' in 'ThreadsMVC.Controllers.CommentController'. The dictionary contains a value of type 'System.Int32', but the parameter requires a value of type 'System.Nullable 1 [System.Int64]». Имя параметра: параметры

Если я изменю объявление на:

    public ActionResult List(long id, [DefaultValue(0)] int? commentId)

Код работает нормально. Я что-то не так делаю или проблема в том, что отражение слишком строго по типу для Int32 против Int64? И что я могу сделать, чтобы это исправить? Примените длинную как строку?

Ответы [ 3 ]

1 голос
/ 07 августа 2009

Я думаю, что это более читабельно / менее грязно, и работает также в MVC 1:

public ActionResult List(long id, long? commentId)
{
    var model = UserComment.ForRefId(id);
    PageTitle = string.Format("Comments for '{0}'", 
                              SetCommentThread(id).Subject);
    ViewData[MvcApplication.SAnchor] = commentId.GetValueOrDefault(0);
1 голос
/ 23 июля 2011

Просто добавьте следующее в метод global.asax Application_Start

ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();

Подробнее об этом см. Блог Скотта: http://weblogs.asp.net/scottgu/archive/2010/12/14/update-on-asp-net-mvc-3-rc2-and-a-workaround-for-a-bug-in-it.aspx

Также см. Сортировка jQuery и прекращение работы MVC

1 голос
/ 07 августа 2009

Попробуйте

 public ActionResult List(long id, [DefaultValue((long)0)] long? commentId)
...