Asp.net MVC 4: ошибка в Chrome, а не в Internet Explorer

Я не уверен, что здесь происходит.

У меня есть метод действия, который вызывается в сценарии jquery, который у меня есть...

                    ondblClickRow: function (id) {
                        debugger;
                        var dummyURL ='@Url.Action("EditEncounter", "EditEncounter", new { encounterId = 0, popId = (int)TempData["POPULATIONID"] })';
                        var path = dummyURL.replace("-2", id);
                        document.location.href = path;
                        //new { encounterId = temp.EncounterId, popId = (int)TempData["POPULATIONID"] }'
                    }

по какой-то причине, когда я пытаюсь перейти на эту страницу по этому маршруту с помощью Chrome, я получаю это исключение:

The parameters dictionary contains a null entry for parameter 'popId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult EditEncounter(Int32, Int32)' in 'FocusedReadMissionsRedux.Controllers.EditEncounterController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters

Но в IE я вызываю метод действия и без происшествий перехожу на соответствующую страницу. Я должен что-то упустить?

ОБНОВЛЕНО Я заметил, что получаю эту строку запроса...

encounterId=2245&popId=2

Обратите внимание на «&» и «amp;». Я думаю, что мой маршрут настроен неправильно. Я попробую пару вещей и сообщу вам, господа, что получится.

ПОДТВЕРЖДЕНО

это маршрут, который у меня есть в Internet Explorer

encounterId=2245&popId=2

И это работает. Мне просто нужно выяснить, почему это происходит для этого конкретного запроса.

ОБНОВЛЕНИЕ

Visual Studio не обновляет файлы cshtml, которые создаются, когда я пытаюсь отладить свою программу. Кто-нибудь сталкивался с этим и как с этим справиться?


person SoftwareSavant    schedule 14.01.2013    source источник
comment
А что вы видите на вкладке Network панели инструментов разработчика Chrome? Какой URL запрашивается? Это правильный? Также, когда вы проверяете HTML-код страницы, какое значение имеет dummyURL в разметке. И последний вопрос: что со строкой dummyURL.replace("-2", id)? Вы регистрировали значение этой переменной id внутри метода? Также вы, кажется, используете TempData там, поскольку вы знаете, что его можно выселить, если был сделан промежуточный запрос, который читает из него. Это может быть, например, запрос AJAX.   -  person Darin Dimitrov    schedule 15.01.2013
comment
Я убедился, что поле tempdata увлажнено. Эта строка предназначена для того, чтобы я мог получить точный маршрут для перехода после срабатывания определенного события. Я проверю html-трафик с помощью chrome.   -  person SoftwareSavant    schedule 15.01.2013


Ответы (2)


У меня была аналогичная проблема, но я смог решить ее, включив свой Url.Action в Html.Raw, который избавился от amp; согласно этого решения Надеюсь, кто-нибудь найдет помощь в этом.

person Purusartha    schedule 27.03.2014

Вы пытались установить для popId тип nullable? Похоже, вам не нравится, что ваш необязательный параметр является целым числом, а не целым числом, допускающим значение NULL. Конечно, я не вижу ваш контроллер и представление, но это то, о чем мне говорит сообщение об ошибке. Смотри ниже.

Добавьте int? вместо int

Таким образом, ваш ViewResult должен иметь параметры, допускающие значение NULL в вашем контроллере:

public ViewResult EditEncounter(int? encounterId, int? popId)

ОБНОВЛЕНИЕ. После дальнейшего обсуждения выясняется, что Chrome не заполняет и не утверждает ваш объект TempData, в то время как IE делает это. Может быть, опубликовать дополнительную информацию об этом процессе.

person John Gerdsen    schedule 14.01.2013
comment
Как это объясняет работу IE? Как это решит проблему? Да, он, вероятно, не получит исключение, но он получит null внутри действия контроллера, что, я полагаю, здесь не то, что нужно. - person Darin Dimitrov; 15.01.2013
comment
Я бы предположил, что происходит то, что IE правильно заполняет ваш объект TempData, а Chrome - нет. Следовательно, проблема с тем, что он является нулевым, когда он переходит к вашему методу EditEncounter, он видит, что параметры требуются, а не nullable. Может быть, вы можете опубликовать больше кода, чтобы увидеть, как и где заполняется TempData и какие методы используются. Возможно, есть что-то, что Chrome не нравится. - person John Gerdsen; 15.01.2013
comment
TempData — это переменная на стороне сервера. Это не браузер, который заполняет его. - person Darin Dimitrov; 15.01.2013
comment
Можете ли вы опубликовать код? Я предполагаю, что если вы выгрузите TempData на экран в Chrome, он вернет информацию null, в то время как IE, очевидно, будет содержать данные объекта. - person John Gerdsen; 15.01.2013
comment
Если бы TempData не содержал значения, он получил бы InvalidCastException при рендеринге представления, потому что он приводит его к (int). Здесь это не похоже. Очевидно, было бы полезно, если бы ОП немного отладил свой код и предоставил больше информации, чтобы нам не приходилось здесь гадать. - person Darin Dimitrov; 15.01.2013
comment
Хороший звонок. Я на секунду подумал, что ты ОП. Извини за это. Из-за опечатки выше это звучало так, как будто вы были парнем, после двойной проверки я понимаю, что вы не сожалеете о том, что разговариваете с вами как с плакатом. - person John Gerdsen; 15.01.2013
comment
Temp Data работает во всех остальных случаях с Chrome. Я не уверен, что это корень проблемы здесь. Я только что заметил при просмотре URL-адреса, что я получаю это... встреча Id=2245popId=2 Обратите внимание на и и amp; Я думаю, что мой маршрут генерируется неправильно, поэтому он думает, что я отправляю нулевое значение. Я обновлю свой пост и попробую кое-что. Я дам вам знать, ребята. - person SoftwareSavant; 15.01.2013