Masalah desain ASP.NET MVC

Saya memiliki tampilan utama dengan 2 tampilan parsial (tampilan grid dan panel panggilan balik)

Tampilan utama ini menerima IEnumerable<Model> dan panel hanya menerima Model.

Saat tampilan pertama kali dipanggil, sebagian tampilan panel diisi dengan model kosong sehingga kosong.

Tapi saya ingin merender ulang panel setelah saya mengklik Edit di GridView saya.

Bagaimana saya bisa mencapainya?

Saat ini saya memiliki @Html.ActionLink di tombol Edit tetapi tidak berfungsi karena akan membuat tampilan baru alih-alih merender ulang sebagian tampilan panel.

Ada petunjuk?

Sunting:

ini hasil edit saya:

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

Fungsi yang dipanggil oleh tautan edit:

    [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);
    }

Tampilan utama yang berisi sebagian tampilan:

@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 sumber


Jawaban (2)


Saat ini saya memiliki @Html.ActionLink di tombol Edit

Anda bisa menggunakan AJAX. Misalnya Anda dapat mengganti Html.ActionLink ini dengan Ajax.ActionLink dan menyertakan skrip jquery.js dan jquery.unobtrusive-ajax.js (dalam urutan itu) untuk membuatnya bertindak sebagai panggilan AJAX. Misalnya:

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

Ketika tautan diklik, tindakan Edit pengontrol akan dipanggil menggunakan permintaan AJAX dan id item saat ini akan diteruskan sebagai parameter. Ketika permintaan AJAX ini selesai, elemen DOM dengan id="editContainer" akan diperbarui dengan hasil panggilan AJAX ini. Jadi tindakan Edit pengontrol Anda harus mengembalikan tampilan sebagian yang berisi catatan yang akan diedit.

person Darin Dimitrov    schedule 05.06.2013
comment
Lalu bagaimana saya bisa meneruskan parameternya? Dalam kasus saya, saya memberikan id jadi saya tahu id Model yang harus saya tampilkan - person AAlferez; 05.06.2013
comment
Anda cukup meneruskan id catatan yang akan diedit sebagai bagian dari parameter ruteValues ​​ke pembantu Ajax.ActionLink seperti yang ditunjukkan dalam jawaban saya. Karena Anda akan memiliki tautan Edit untuk setiap catatan, Anda sudah mengetahui id catatan tersebut. Ajax.ActionLink kemudian akan menghasilkan url dengan format berikut: /somecontroller/edit/123 dimana 123 tentu saja adalah id dari record yang akan diedit. Dan tindakan Edit pengontrol Anda hanya akan menggunakan parameter id ini sebagai argumen. - person Darin Dimitrov; 06.06.2013
comment
Ini melakukan hal yang persis sama. Mungkin fungsi yang saya panggil yang bermasalah. - person AAlferez; 06.06.2013
comment
Apa yang Anda maksud dengan melakukan hal yang sama? Tahukah Anda perbedaan antara Ajax.ActionLink dan Html.ActionLink? Tahukah anda apa itu AJAX? Juga dalam contoh kode yang Anda tunjukkan sepertinya Anda menggunakan beberapa DataBinder.Eval. Tahukah Anda perbedaan antara ASP.NET WebForms klasik dan ASP.NET MVC? Anda sepertinya benar-benar bingung apa itu ASP.NET MVC. Saya sarankan Anda membaca beberapa tutorial dasar untuk memulai di sini: asp.net/mvc - person Darin Dimitrov; 06.06.2013
comment
Ya @Darin, saya tahu. Namun ini adalah tautan tindakan, dan sebagaimana adanya, ia tidak akan merender sebagian tampilan yang saya inginkan. Mungkin masalah saya adalah fungsi yang dipanggilnya. - person AAlferez; 06.06.2013

Diselesaikan dengan Ajax POST

$.ajax({ ketik: "POST", url: url, data: data, sukses: sukses, tipe data: tipe data });

person AAlferez    schedule 18.06.2013