ปัญหาการออกแบบ ASP.NET MVC

ฉันมีมุมมองหลักที่มี 2 มุมมองบางส่วน (gridview และแผงโทรกลับ)

มุมมองหลักนี้ได้รับ IEnumerable<Model> และแผงควบคุมเพิ่งได้รับ Model

เมื่อเรียกมุมมองในตอนแรก มุมมองบางส่วนของแผงจะเต็มไปด้วยโมเดลว่างดังนั้นจึงว่างเปล่า

แต่ฉันต้องการเรนเดอร์พาเนลอีกครั้งเมื่อฉันคลิก Edit ใน GridView

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?

ขณะนี้ฉันมี @Html.ActionLink ในปุ่มแก้ไข แต่มันใช้งานไม่ได้เนื่องจากจะสร้างมุมมองใหม่แทนที่จะแสดงมุมมองบางส่วนของแผงอีกครั้ง

มีเบาะแสอะไรบ้าง?

แก้ไข:

นี่คือการแก้ไขของฉัน:

Html.ActionLink("Edit", "EditConfig", new { id = DataBinder.Eval(c.DataItem, "QueueMonitorConfigurationsID") })

ฟังก์ชันที่เรียกลิงก์แก้ไข:

    [HttpGet]
    public ActionResult EditConfig(int id)
    {
        StorageConfigurationModel resultForPanel = new StorageConfigurationModel { };
        IEnumerable<StorageConfigurationModel> configList = (IEnumerable<StorageConfigurationModel>)Session["ConfigurationList"];
        foreach (StorageConfigurationModel configModel in configList)
        {
            if (configModel.QueueMonitorConfigurationsID == id)
            {
                resultForPanel = configModel;
                break;
            }
        }
        return PartialView("cbpnlNewUpdateConfigs", resultForPanel);
    }

มุมมองหลักที่มีมุมมองบางส่วน:

@model IEnumerable<BPM.Website.Models.StorageConfigurationModel>

@Html.Partial("gvConfigurations", Model)

@Html.Partial("cbpnlNewUpdateConfigs", new BPM.Website.Models.StorageConfigurationModel { QueueMonitorConfigurationsID = -1 })

person AAlferez    schedule 05.06.2013    source แหล่งที่มา


คำตอบ (2)


ขณะนี้ฉันมี @Html.ActionLink อยู่ในปุ่มแก้ไข

คุณสามารถใช้ AJAX ได้ ตัวอย่างเช่น คุณสามารถแทนที่ Html.ActionLink นี้ด้วย Ajax.ActionLink และรวมสคริปต์ jquery.js และ jquery.unobtrusive-ajax.js (ตามลำดับ) เพื่อให้ทำหน้าที่เป็นการโทร AJAX ตัวอย่างเช่น:

@Ajax.ActionLink(
    "click to edit record", 
    "Edit", 
    new { id = item.Id }, 
    new AjaxOptions { UpdateTargetId = "editContainer" }
)

เมื่อคลิกลิงก์ การดำเนินการแก้ไขตัวควบคุมจะถูกเรียกใช้โดยใช้คำขอ AJAX และรหัสของรายการปัจจุบันจะถูกส่งผ่านเป็นพารามิเตอร์ เมื่อคำขอ AJAX นี้เสร็จสมบูรณ์ องค์ประกอบ DOM ที่มี id="editContainer" จะได้รับการอัปเดตพร้อมกับผลลัพธ์ของการเรียก AJAX นี้ ดังนั้นการดำเนินการแก้ไขคอนโทรลเลอร์ของคุณควรส่งคืนมุมมองบางส่วนที่มีเรกคอร์ดที่จะแก้ไข

person Darin Dimitrov    schedule 05.06.2013
comment
ฉันจะส่งพารามิเตอร์ได้อย่างไร ในกรณีของฉัน ฉันผ่าน id ดังนั้นฉันจึงรู้รหัสโมเดลที่ฉันต้องแสดง - person AAlferez; 05.06.2013
comment
คุณเพียงแค่ส่ง ID ของบันทึกที่จะแก้ไขโดยเป็นส่วนหนึ่งของพารามิเตอร์ RouteValues ​​ไปยังตัวช่วย Ajax.ActionLink ดังที่แสดงในคำตอบของฉัน เนื่องจากคุณจะมีลิงก์แก้ไขสำหรับแต่ละเรคคอร์ด คุณจึงทราบรหัสของเรคคอร์ดอยู่แล้ว จากนั้น Ajax.ActionLink จะสร้าง URL ที่มีรูปแบบต่อไปนี้: /somecontroller/edit/123 โดยที่ 123 เป็นรหัสของบันทึกที่จะแก้ไข และการดำเนินการแก้ไขคอนโทรลเลอร์ของคุณจะใช้พารามิเตอร์ id นี้เป็นอาร์กิวเมนต์ - person Darin Dimitrov; 06.06.2013
comment
นี่กำลังทำสิ่งเดียวกันทุกประการ บางทีฟังก์ชั่นที่ฉันเรียกว่าอาจเป็นปัญหา - person AAlferez; 06.06.2013
comment
คุณหมายถึงอะไรโดย มันทำแบบเดียวกัน? คุณรู้ความแตกต่างระหว่าง Ajax.ActionLink และ Html.ActionLink หรือไม่? คุณรู้ไหมว่า AJAX คืออะไร? ในตัวอย่างโค้ดที่คุณได้แสดงไว้ ดูเหมือนว่าคุณกำลังใช้ DataBinder.Eval อยู่บ้าง คุณรู้ความแตกต่างระหว่าง ASP.NET WebForms แบบคลาสสิกและ ASP.NET MVC หรือไม่ ดูเหมือนคุณจะสับสนอย่างสิ้นเชิงว่า ASP.NET MVC คืออะไร ฉันขอแนะนำให้คุณอ่านบทช่วยสอนการเริ่มต้นใช้งานขั้นพื้นฐานที่นี่: asp.net/mvc - person Darin Dimitrov; 06.06.2013
comment
ใช่ @ดาริน ฉันรู้ แต่มันคือลิงก์การดำเนินการ และในลักษณะที่เป็นอยู่ มันจะไม่แสดงมุมมองบางส่วนที่ฉันต้องการอีกครั้ง บางทีปัญหาของฉันอาจเป็นฟังก์ชันที่มันเรียกใช้ - person AAlferez; 06.06.2013

แก้ไขด้วย Ajax POST

$.ajax({ ประเภท: "POST", url: url, ข้อมูล: ข้อมูล, ความสำเร็จ: ความสำเร็จ, dataType: dataType });

person AAlferez    schedule 18.06.2013