سؤال

لدي تطبيق ويب .NET MVC4 حيث أستخدم جداول بيانات jquery لإنشاء شبكة.

تحتوي هذه الشبكة على حوالي 100 مستخدم، ولكنها تعرض 5 مستخدمين فقط لكل صفحة.أمام كل اسم مستخدم لدي مربع اختيار.يمكنني تحديد مستخدمين من شبكتي والضغط على زر الحذف لحذف هؤلاء المستخدمين.

طاولتي مبنية على هذا النحو (ببساطة):

<table class="datatables">
    <tbody>
        <tr>
            <td><input type="checkbox" name="user[0].Delete" /></td>
            <td><input type="hidden" name="user[0].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[1].Delete" /></td>
            <td><input type="hidden" name="user[1].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[2].Delete" /></td>
            <td><input type="hidden" name="user[2].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[3].Delete" /></td>
            <td><input type="hidden" name="user[3].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[4].Delete" /></td>
            <td><input type="hidden" name="user[4].Username" /></td>
        </tr>
    </tbody>
</table>

يمكنني الآن تحديد خانتي الاختيار الأولين والضغط على زر الحذف لحذف السجلات المحددة.يعمل بشكل جيد.هذا سوف يستدعي ActionResult الذي يبدو مثل هذا:

public ActionResult Delete(UserDeleteModel[] users)
{
    // delete records code
}

*لكن، * عندما انتقل إلى الصفحة الثانية في شبكة جداول البيانات، سيبدو جدول HTML الخاص بي كما يلي:

<table class="datatables">
    <tbody>
        <tr>
            <td><input type="checkbox" name="user[5].Delete" /></td>
            <td><input type="hidden" name="user[5].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[6].Delete" /></td>
            <td><input type="hidden" name="user[6].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[7].Delete" /></td>
            <td><input type="hidden" name="user[7].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[8].Delete" /></td>
            <td><input type="hidden" name="user[8].Username" /></td>
        </tr>
        <tr>
            <td><input type="checkbox" name="user[9].Delete" /></td>
            <td><input type="hidden" name="user[9].Username" /></td>
        </tr>
    </tbody>
</table>

لذلك input الحقول تبدأ العد من 5.وهو أمر منطقي بالطبع.

ولكن عندما أحدد مستخدمًا وأضغط على زر الحذف، أرى أن المتصفحات تنشر جميع حقول الإدخال وقيمها، ولكن ActionResult يعطيني فارغة UserDeleteModel[] list.

السبب UserDeleteModel[] list يكون NULL وذلك لأن حقول النموذج في شبكة الجدول لا تبدأ العد منها 0 في الصفحة الثانية.يبدأ من 5 في الصفحة الثانية.

لسبب ما، يجب أن يحتوي .NET على حقول تبدأ من 0 العد تصاعديا بالترتيب.إذا بدأ من أي رقم آخر، فلن يتم تعيين الحقول المنشورة إلى ViewModel الخاص بي في وحدة التحكم.

أرى قيم النموذج في ملف Request.Form هدف.ولكن لسبب ما لم يتم تعيينه.

وهذا خطأ إشكالي بالطبع.هل لدى أحد أي فكرة عن كيفية حل هذه المشكلة؟

هل كانت مفيدة؟

المحلول

تكمن المشكلة التي تواجهها في كيفية ربط ASP.NET MVC للمجموعات.أنت تقوم بنشر مجموعة غير متسلسلة (أي.لا يبدأ الفهرس بـ 0)، لذا فإن رابط MVC الافتراضي لا يعرف كيفية حله.

ألقِ نظرة على الإجابة التالية:

ربط المجموعة غير التسلسلية

الحل الآخر هو إنشاء ملف خاص بك، حسب احتياجاتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top