Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Некоректрый параметр при вызове метода в MVC


Автор: Proger89 6.5.2010, 19:03
Доброго времени суток.
Мне нужно разработать простой сайт на MVC, но у меня возникло две проблемы, которые связаны с одной и той-же ошибкой. (для наглядности я прикрепил часть изображения схемы своей БД).
Для начала я создал страничку для отображения класса Performer. Там выводиться класс всех исполнителей + можно нажать на кнопку Details и посмотреть подробности. URL при просмотре подробной информации выглядит как http://.../Performer/Details/1, но если в качестве Id написать очень большое число (метод принимает int), то вываливается такая ошибка:
Цитата

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'WebInterface.Controllers.PerformerController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.


Вторая проблема состоит в том, что я хотел создать страницу выводящую все тексты песен для конкретного исполнителя (связь LinqPerformer -> LinqLyric на картике). Я написал следующий код:
Код

namespace WebInterface.Controllers
{
    public class LyricController : Controller
    {

        LyricBL _lyricBL = new LyricBL();
        //
        // GET: /Lyric/

        public ActionResult Index(int PerformerId)
        {
            var lyrics = _lyricBL.GetAllPerformerLyrics(PerformerId);
            return View(lyrics);
        }

Потом я создал View для этого класса. Но когда я перехожу по URL http://.../Lyric/Index/1 получаю:
Цитата

The parameters dictionary contains a null entry for parameter 'PerformerId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Index(Int32)' in 'WebInterface.Controllers.LyricController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Имя параметра: parameters


Что я делаю не так?
Заранее благодарен.


Автор: Любитель 6.5.2010, 22:40
1. Если параметр роутинга не может быть сконвертирован в нужный экшен-параметр, то логично что получится, что этот параметр останется без значения. Если выше приложение должно реагировать специальным образом на такие урл-ы - можно задать параметру значение по умолчанию (через атрибут DefaultValue или синтаксис 4-го шарпа) или сделать его нуллабельным (и обрабатывать в коде ситуацию для null-значения).
2. Со вторым предполагаю, что у вас используется дефолтная таблица роутинга. В ней нигде нет параметра PerformerId (дефотная схема: {controller}/{action}/{value}).

И используйте, плиз, quote вместо code, если длинные строки есть

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)