في المشروع الحالي، هناك جزء بحث من الضروري عرض الحقول في شبكة نتائج البحث للسماح للمستخدمين بالاختيار،
لذلك، يتم استخدام مربعي قائمة لسرد جميع الحقول القابلة للعرض وحقول العرض المحددة على التوالي،
ويتم استخدام js المقدمة للتحكم في العناصر الموجودة بين مربعي القائمة، إضافة وحذف ونقل
(مستحيل، قال الاختبار أن حدث الخلفية قد تم تحديثه ويبدو غير مريح...)
لذلك قمت بإنشاء زرين html
الأحداث هي كما يلي: (لا تقلق بشأن Hidden1 الآن)
اختبار الدالة (lbFieldsSelect، القيمة)
{
لـ (j = 0;j<lbFieldsSelect.length; j++)
{
إذا (lbFieldsSelect.options[j].value == value) يُرجع صحيحًا؛
}
عودة كاذبة.
}
الدالة SelectField()
{
var lbFields = document.getElementById("lbFields");
var lbFieldsSelect = document.getElementById("lbFieldsSelect");
var Hidden1 = document.getElementById("Hidden1");
لـ (i = 0;i<lbFields.length; i++)
{
إذا (lbFields.options[i].selected)
{
إذا (اختبار (lbFieldsSelect،lbFields.options[i].value))
{
// تم تحديد الحقل
يكمل؛
}
lbFieldsSelect.options.add(document.createElement("OPTION"));
lbFieldsSelect.options[lbFieldsSelect. length-1].text=lbFields.options[i].text;
lbFieldsSelect.options[lbFieldsSelect. length-1].value=lbFields.options[i].value;
Hidden1.value = Hidden1.value + "#" + lbFields.options[i].text + "@" + lbFields.options[i].value;
}
}
}
الدالة UnSelectField()
{
var lbFields = document.getElementById("lbFields");
var lbFieldsSelect = document.getElementById("lbFieldsSelect");
var Hidden1 = document.getElementById("Hidden1");
لـ (i = 0;i<lbFieldsSelect.length; i++)
{
إذا (lbFieldsSelect.options[i].selected)
{
lbFieldsSelect.options.add(document.createElement("OPTION"));
lbFieldsSelect.options[lbFieldsSelect. length-1].text=lbFields.options[i].text;
lbFieldsSelect.options[lbFieldsSelect. length-1].value=lbFields.options[i].value;
Hidden1.value = Hidden1.value + "#" + lbFields.options[i].text + "@" + lbFields.options[i].value;
}
}
}
بشكل غير متوقع، عند إرساله إلى الخلفية، اختفى عنصر القائمة الذي تمت إضافته في مكتب الاستقبال بالتفكير مليًا، لا بد أن asp.net لم يقم بإضافة ViewState بعد تغيير عميل ListBox عند إعادة النشر.
في الواقع، لا يمكنك إلقاء اللوم على ms، حتى أن الجدول لا يحتوي على ViewState (وفقًا لـ ms، فإن الجدول مجرد حاوية، ومن الضروري أن تحافظ عناصر التحكم في الجدول على ViewState)
من الواضح أنه لم يعد هناك حاجة إلى ListBox، وهو الشيء الذي نادرًا ما يغيره العميل، وليس لدي خيار سوى إنشاء شيء يمكنه الحفاظ على حالة العرض لوضع العناصر في listBox، لذلك لدي
الكود المقابل على جانب الخادم Hidden1 فوق:
الفراغ الخاص RestorelbFieldsSelect()
{
string[] sField =Hidden1.Value.Split('#');
//lstShowField.Items.Clear();
DataTable dtField = new DataTable();
dtField.Columns.Add("sDisplayName"،".GetType());
dtField.Columns.Add("sFieldName"،".GetType());
لـ (int i = 0 ; i < sField.Length ; i ++)
{
if (sField[i] == null || sField[i] == "") continue;
صف DataRow = dtField.NewRow();
صف[0] = sField[i].Split( '@')[0 ];
صف[1] = sField[i].Split( '@')[1 ];
dtField.Rows.Add(row);
}
lbFieldsSelect.DataSource = dtField;
lbFieldsSelect.DataTextField = "sDisplayName";
lbFieldsSelect.DataValueField = "sFieldName";
lbFieldsSelect.DataBind();
}
في هذه الحالة، سيتم تحديث ListBox وفقًا للحالة المخفية في كل مرة يتم فيها تحميل الصفحة.
تم تحقيق هدف مشروعنا (هناك حاجة فقط إلى عنصر ListBox، وليست هناك حاجة للنظر في الاختيار، وما إلى ذلك)
إذا كنت بحاجة إلى معالجة العناصر المحددة، فقد تحتاج إلى ملف مخفي آخر.
http://www.cnblogs.com/calmzeal/archive/2006/07/26/460068.html