MVC Controller พฤติกรรมที่แตกต่างกันระหว่างการส่งแบบฟอร์มและการโทร Ajax

ฉันค่อนข้างใหม่กับ MVC และการพัฒนาเว็บไซต์โดยทั่วไป ดังนั้นโปรดอดทนกับฉันด้วย

ในเว็บแอปของฉัน ฉันกำลังพยายามเรียกการดำเนินการของคอนโทรลเลอร์ผ่านคำขอ Ajax เนื่องจากฉันต้องการรีเฟรชมุมมองบางส่วนในเพจของฉันเท่านั้น แทนที่จะเป็นทั้งหน้า ทุกอย่างทำงานได้อย่างถูกต้อง (มุมมองบางส่วนจะถูกส่งกลับโดยไม่ต้องรีเฟรชมุมมองหลัก) ยกเว้นมุมมองบางส่วนจะส่งกลับค่าที่ไม่ถูกต้อง หลังจากการดีบัก ฉันพบว่ามีข้อผิดพลาดเกิดขึ้นกับคำสั่ง Request ในการดำเนินการของคอนโทรลเลอร์ เมื่อการดำเนินการของคอนโทรลเลอร์ถูกเรียกโดยการส่งแบบฟอร์มปกติ คำขอสามารถรับค่าอินพุตของผู้ใช้ได้ แต่ไม่ใช่เมื่อฉันเรียกคอนโทรลเลอร์ด้วยคำขอ Ajax พวกเขาเพียงแค่ส่งคืนค่าว่าง

โปรดดูตัวอย่างด้านล่างนี้ ซึ่งเป็นเวอร์ชันที่เรียบง่ายมากของสิ่งที่ฉันกำลังเผชิญอยู่ เมื่อใช้ Ajax ผลรวมจะเป็น 0 เสมอเนื่องจากคำสั่งแยกวิเคราะห์ล้มเหลวด้วยค่าว่าง

ตัวควบคุม:

[HttpPost]
public ActionResult Calculate() {
    ViewBag.Total = 0;
    for(int i = 1; i < 10; i++) {   // max number of Frames that users can add is 10
        string FrameNumber = i.ToString;
        try {
            string rawValue1 = Request["input1_Frame" + FrameNumber];
            string rawValue2 = Request["input2_Frame" + FrameNumber];
            decimal Value1 = decimal.Parse(rawValue1);
            decimal Value2 = decimal.Parse(rawValue2);
            ViewBag.Total += Value1 + Value2;
        } catch {
            break;
    }

    return PartialView("Banner");
}

เจคิวรี:

 $("#calculate").on("click", function () {
    $.ajax({
        cache: false,
        dataType: 'text',
        type: "POST",
        url: "/Home/Calculate",
        success: function (data) {
            $(".banner").html(data);
        },
        error: function () {
            alert("Something went wrong in the controller");
        }
    });
    return false;
})

ดู:

<div class="banner"></div>
<input name="input1" type="text">
<input name="input2" type="text">
<button id="calculate">Calculate Total</button>

มุมมองบางส่วน:

<div>
    Total:
    <span id="totalValue">@ViewBag.Total</span>
</div>

แก้ไข: เพื่อชี้แจงว่าทำไมฉันไม่เพียงแค่ส่งค่าเป็นพารามิเตอร์ Ajax เนื่องจากในมุมมองจริงของฉัน จำนวนอินพุตจะถูกสร้างขึ้นแบบไดนามิกด้วย JQuery ตัวอย่างเช่น ฉันมีเฟรมที่มีอินพุต 15 อินพุต แต่ผู้ใช้สามารถเลือกที่จะเพิ่มเฟรมเพิ่มเติมได้ ดังนั้นรวมแล้วจะมีอินพุต 30, 45, 60,... หรือมากกว่านั้น ฉันไม่แน่ใจว่าจะจัดการพารามิเตอร์ Ajax อย่างไร ดังนั้นสำหรับแต่ละเฟรมฉันจะวนซ้ำ 15 ครั้ง เพิ่ม ID อินพุตในแต่ละครั้ง และขอข้อมูลด้วยวิธีนั้น ฉันได้อัปเดตโค้ดสำหรับคอนโทรลเลอร์เพื่อให้เห็นภาพสิ่งที่ฉันพูดได้ดีขึ้น


person Jon    schedule 24.08.2017    source แหล่งที่มา
comment
คุณควรส่งพารามิเตอร์ไปยังวิธีการควบคุมผ่านการร้องขอ ajax แทนที่จะอ่านจากวัตถุคำขอ   -  person Rex    schedule 24.08.2017
comment
ในโค้ด Ajax ของคุณ คุณไม่ได้ส่งข้อมูลโพสต์ใด ๆ ไปยังเซิร์ฟเวอร์ นั่นเป็นสาเหตุที่ทำให้คุณไม่ได้รับค่าจากคำขอ   -  person Chetan Ranpariya    schedule 24.08.2017
comment
คุณตั้งใจที่จะส่งฟิลด์ที่สร้างแบบไดนามิกด้วย AJAX POST จากนั้นส่งคืนมุมมองบางส่วนที่มีผลลัพธ์สำหรับหมายเลขที่ส่งทั้งหมด หรือส่งคืนการตอบสนอง JSON จากการเรียก AJAX เป็นผลลัพธ์เพิ่มเติมโดยไม่แสดงผลมุมมองบางส่วนหรือไม่ กรุณาอธิบายรายละเอียดเพิ่มเติม   -  person Tetsuya Yamamoto    schedule 25.08.2017