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 ซึ่งกำจัดแอมป์ออกไป ตามโซลูชันนี้หวังว่าจะมีคนพบความช่วยเหลือเกี่ยวกับเรื่องนี้

person Purusartha    schedule 27.03.2014

คุณได้ลองตั้งค่า popId ของคุณเป็นประเภท nullable แล้วหรือยัง? ดูเหมือนว่าไม่ชอบให้พารามิเตอร์ทางเลือกของคุณเป็นจำนวนเต็มและไม่ใช่จำนวนเต็มที่เป็นโมฆะ แน่นอนว่าฉันไม่เห็นคอนโทรลเลอร์และมุมมองของคุณ แต่นี่คือสิ่งที่ข้อความแสดงข้อผิดพลาดบอกฉัน ดูด้านล่าง

เพิ่ม int? แทน int

ดังนั้น ViewResult ของคุณจะต้องมีพารามิเตอร์ที่เป็นโมฆะในคอนโทรลเลอร์ของคุณ:

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

อัปเดต: หลังจากการสนทนาเพิ่มเติม ปรากฏว่า Chrome ไม่ได้เติมหรืออนุมัติวัตถุ TempData ของคุณในขณะที่ IE อยู่ อาจโพสต์ข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการนี้

person John Gerdsen    schedule 14.01.2013
comment
สิ่งนี้จะอธิบาย การทำงานของ IE ได้อย่างไร สิ่งนี้จะแก้ปัญหาได้อย่างไร? ใช่ เขาอาจจะไม่ได้รับข้อยกเว้น แต่เขาจะได้รับค่าว่างจากการทำงานของคอนโทรลเลอร์ ซึ่งฉันคิดว่าไม่ใช่สิ่งที่ต้องการที่นี่ - 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) ดูเหมือนจะไม่เป็นเช่นนั้นที่นี่ แน่นอนว่ามันจะช่วยได้ถ้า OP ดีบั๊กโค้ดของเขาเล็กน้อยและให้ข้อมูลเพิ่มเติมเพื่อที่เราจะได้ไม่ต้องเดาที่นี่ - person Darin Dimitrov; 15.01.2013
comment
โทรดี. สักพักฉันก็คิดว่าคุณเป็น OP ขอโทษด้วยกับเรื่องนั้น. การพิมพ์ผิดจากด้านบนทำให้ดูเหมือนคุณเป็นผู้ชาย หลังจากตรวจสอบซ้ำแล้ว ฉันก็พบว่าคุณไม่เสียใจที่คุยกับคุณในฐานะผู้โพสต์ - person John Gerdsen; 15.01.2013
comment
ข้อมูลชั่วคราวทำงานได้ในทุกอินสแตนซ์ด้วย Chrome ฉันไม่แน่ใจว่ามันเป็นสาเหตุของปัญหาที่นี่ ฉันเพิ่งสังเกตเห็นเมื่อดู URL ที่ฉันได้รับสิ่งนี้... faceId=2245popId=2 สังเกต and และ amp; ฉันคิดว่าเส้นทางของฉันไม่ได้ถูกสร้างขึ้นอย่างถูกต้อง ดังนั้นจึงคิดว่าฉันกำลังส่งค่าว่าง ฉันจะอัปเดตโพสต์ของฉันและลองทำบางสิ่ง ฉันจะแจ้งให้พวกคุณทราบ - person SoftwareSavant; 15.01.2013