Asp.net MVC 4: Kesalahan di Chrome dan bukan di Internet Explorer

Saya tidak yakin apa yang sedang terjadi di sini.

Saya memiliki metode tindakan yang disebut dalam skrip jquery yang saya miliki...

                    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"] }'
                    }

untuk beberapa alasan ketika saya mencoba menavigasi ke halaman ini melalui rute ini menggunakan chrome saya mendapatkan pengecualian ini:

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

Namun di IE, saya memanggil metode tindakan dan saya menavigasi ke halaman yang sesuai tanpa insiden. Saya pasti melewatkan sesuatu?

DIPERBARUI Saya perhatikan saya mendapatkan string kueri ini...

encounterId=2245&popId=2

Perhatikan '&' dan 'amp;'. Saya pikir rute saya tidak diatur dengan benar. Saya akan mencoba beberapa hal dan memberi tahu Anda apa yang terjadi.

DIKONFIRMASI

ini adalah rute yang saya miliki di internet explorer

encounterId=2245&popId=2

Dan itu berhasil. Saya hanya perlu mencari tahu mengapa hal ini terjadi untuk permintaan khusus ini.

PEMBARUAN

Visual studio tidak memperbarui file cshtml yang dihasilkan ketika saya mencoba men-debug program saya. Adakah yang mengalami hal ini dan bagaimana cara mengatasinya?


person SoftwareSavant    schedule 14.01.2013    source sumber
comment
Dan apa yang Anda lihat di tab Network pada toolbar pengembang Chrome? Url apa yang diminta? Apakah itu yang benar? Juga ketika Anda memeriksa HTML halaman berapa nilai dummyURL di markup. Dan satu pertanyaan terakhir: ada apa dengan baris dummyURL.replace("-2", id)? Apakah Anda mencatat nilai variabel id ini di dalam metode? Tampaknya Anda juga menggunakan TempData di sana seperti yang Anda tahu, TempData dapat dikeluarkan jika permintaan perantara yang membacanya telah dibuat. Misalnya, ini bisa berupa permintaan AJAX.   -  person Darin Dimitrov    schedule 15.01.2013
comment
Saya memastikan bidang tempdata terhidrasi. Garis itu agar saya bisa mendapatkan rute yang akurat untuk dinavigasi setelah peristiwa tertentu dipicu. Saya akan memeriksa lalu lintas html menggunakan chrome.   -  person SoftwareSavant    schedule 15.01.2013


Jawaban (2)


Saya memiliki masalah serupa, tetapi dapat mengatasinya dengan menyertakan Url.Action saya di dalam Html.Raw yang menghilangkan amp; sesuai solusi ini Semoga seseorang menemukan bantuan dalam hal ini.

person Purusartha    schedule 27.03.2014

Sudahkah Anda mencoba menyetel popId ke tipe nullable? Sepertinya parameter opsional Anda tidak berupa bilangan bulat dan bukan bilangan bulat yang dapat dibatalkan. Tentu saja saya tidak dapat melihat Pengontrol dan Tampilan Anda, tetapi inilah pesan kesalahan yang disampaikan kepada saya. Lihat di bawah.

Tambahkan int? alih-alih int

Jadi ViewResult Anda harus memiliki parameter nullable di pengontrol Anda:

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

PEMBARUAN: Setelah diskusi lebih lanjut tampaknya Chrome tidak mengisi atau menyetujui objek TempData Anda sementara IE mengisinya. Mungkin memposting beberapa informasi lebih lanjut tentang proses ini.

person John Gerdsen    schedule 14.01.2013
comment
Bagaimana hal ini menjelaskan cara kerja IE? Bagaimana cara ini memecahkan masalah? Ya, dia mungkin tidak akan mendapatkan pengecualian tetapi dia akan mendapatkan null di dalam tindakan pengontrol yang menurut saya bukan yang diinginkan di sini. - person Darin Dimitrov; 15.01.2013
comment
Saya membayangkan apa yang terjadi adalah IE mengisi objek TempData Anda dengan benar sementara Chrome tidak. Oleh karena itu masalahnya adalah null, ketika sampai ke metode EditEncounter Anda, ia melihat parameter diperlukan dan bukan nullable. Mungkin Anda dapat memposting lebih banyak kode untuk melihat bagaimana dan di mana TempData diisi dan metode apa yang digunakan. Mungkin ada sesuatu yang tidak disukai Chrome. - person John Gerdsen; 15.01.2013
comment
TempData adalah variabel sisi server. Bukan browser yang mengisinya. - person Darin Dimitrov; 15.01.2013
comment
Bisakah Anda memposting kodenya? Saya membayangkan jika Anda membuang TempData ke layar di Chrome, itu akan mengembalikan informasi null sementara IE jelas berisi data objek. - person John Gerdsen; 15.01.2013
comment
Jika TempData tidak mengandung nilai, dia akan mendapatkan InvalidCastException saat merender tampilan karena dia mentransmisikannya ke (int). Tampaknya hal ini tidak terjadi di sini. Tentunya akan membantu jika OP sedikit men-debug kodenya dan memberikan lebih banyak informasi sehingga kita tidak perlu menebak-nebak di sini. - person Darin Dimitrov; 15.01.2013
comment
Panggilan bagus. Untuk sesaat saya pikir Anda OP. Maaf tentang itu. Salah ketik dari atas membuatnya terdengar seperti Andalah orangnya, setelah memeriksa ulang saya menyadari Anda tidak menyesal berbicara dengan Anda sebagai poster. - person John Gerdsen; 15.01.2013
comment
Temp Data berfungsi di semua kasus dengan Chrome. Saya tidak yakin itu adalah akar masalahnya di sini. Saya baru menyadarinya ketika melihat URL yang saya dapatkan ini... perjumpaanId=2245popId=2 Perhatikan dan dan amp; Saya pikir rute saya tidak dibuat dengan benar, oleh karena itu saya mengira saya mengirimkan nilai nol. Saya akan memperbarui posting saya dan mencoba beberapa hal. Saya akan memberi tahu kalian. - person SoftwareSavant; 15.01.2013