ما هي أفضل طريقة لارسال الكثير من خانات إلى العميل في ASP.Net؟

StackOverflow https://stackoverflow.com/questions/235608

سؤال

ولدي الحالة التالية:

ويمكن للمستخدم ستحدد مرشح معين على إحدى الصفحات، وعلى إعادة النشر سوف الاستعلام عن قاعدة بيانات باستخدام هذا الفلتر والعودة حفنة من سجلات مطابقة للمستخدم، مع كل مربع بجانبه، حتى يتمكن من اختيار ما إذا كان ل العمل على كل من تلك السجلات

في الكلاسيكية ASP / PHP I يمكن أن تولد الكثير من الضوابط اسمه "فص __ *" ومن ثم إعادة النشر تذهب من خلال جميع $ <م> مقالات وظيفة تبحث عن تلك مسبوقة "فص ".

ما هي أفضل طريقة للقيام بذلك في ASP.Net 2.0؟

وأستطيع أن أفعل ذلك بسهولة من خلال تنفيذ مكرر مع قالب يحتوي على مربع، ربط مكرر لمجموعة بيانات، ومن ثم على إعادة النشر الثاني، وأنا مجرد القيام به:

For Each it As RepeaterItem In repContacts.Items
    Dim chkTemp As CheckBox = DirectCast(it.FindControl("cbSelect"), CheckBox)
    If chkTemp.Checked Then

    End If
Next

ولكن هذا له <م> طفيفة عيب إعطائي حالة العرض ضخم، وهو أمر سيء حقا لأن العميل سوف تحتاج إلى إعادة تحميل في حالة العرض كله إلى الخادم، وربما هؤلاء الناس أن تستخدم موقعي عبر اتصال كربي.

وأي أفكار أخرى؟ (I يمكن أيضا إنشاء عناصر التحكم بشكل حيوي وتكرار خلال Request.Form كما في الأيام الخوالي، ولكن كنت تبحث عن نظافة

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

المحلول

هل لأنها بنفس الطريقة التي فعلت ذلك في ASP الكلاسيكية. استخدام <إدخال نوع = "مربع"> بدلا من <آسيا والمحيط الهادئ: مربع>. يمكنك الوصول إلى PARAMATERS آخر الخام باستخدام Request.Form

نصائح أخرى

هل نظرت إلى السيطرة CheckBoxList؟ يمكنك ربط لمجموعة البيانات الخاصة بك، وتوفير العناصر عضو نص وعضو القيمة، وسوف تسمح لك أيضا أن نرى بسهولة البنود التي يتم فحصها. وهناك أيضا القدرة على إضافة المزيد من العناصر مربع حيوي إذا لزم الأمر.

وأوصي الحل ASP الكلاسيكية عندما تواجه مع الظروف حالة العرض سخيفة. إنه لأمر محزن أن يخسر ملامح لطيفة التي تقدمها، ولكن الجمع بين بعض حالة العرض الضوابط تمكين (آسيا والمحيط الهادئ: *) مع بعض التقنيات الكلاسيكية (المدخلات نوع = "...") وفرت لي <م> الكثير من الصداع في الماضي.

وأحيانا كنت تريد فقط أن تفعل شيئا بسيطا، والحل بسيط يدق "WYSIWYG" نموذج التحرير.

واحدة من الأشياء التي قمت به هو لتسجيل حالة الاختيار عن طريق AJAX في الدورة، ثم على إعادة النشر (الكامل أو الجزئي عن طريق AJAX)، أن ننظر في الدورة للعناصر لتنفيذ الإجراء المحدد على.

والفكرة الأساسية هي إضافة معالج عند النقر على مربع أن يعرف هوية هذا البند المرتبطة بها. في يوم فوق معالج لإيصال هذه الهوية مرة أخرى إلى الخادم عبر AJAX وسجل في الدورة - ستحتاج إلى التواصل وضع مربع بالاضافة الى ذلك يمكنك إلغاء البنود. ومعالج لمراقبة تقدم استخدام البيانات عن التي تم اختيارها العناصر من الدورة.

وهذه الطريقة تسمح لك لمعالجة البيانات المقسم إلى صفحات أيضا، حيث يمكنك تعيين القيمة الأولية للمربع من الدورة عند تقديم (إما كاملة أو جزئية) صفحة مع العناصر المحددة على ذلك.

وقد يبدو شيئا من هذا القبيل. على افتراض AJAX ASP.NET مع PageMethods (وScriptManager، بالطبع).

<script type='text/javascript'>
   function record(checkbox,item)
   {
       var context = { ctl : checkbox };
       PageMethods.Record(item,checkbox.checked,onSuccess,onFailure,context);
   }

   function onSuccess(result,context)
   {
      // do something, maybe highlight the row, maybe nothing
   }

   function onFailure(error,context)
   {
       context.ctl.checked = false;
       alert(error.get_Message());
   }
</script>


...
<tr><td><input type='checkbox' onclick='record(this,"item_1");'></td><td>Item 1</td></tr>
...

Codebehind

[WebMethod(EnableSessionState=true)]
public static void Record( string itemName, bool value )
{
     List<string> itemList = (List<string>)Session["Items"];
     if (itemList == null)
     {
        itemList = new List<string>();
        Session["Items"] = itemList;
     }
     if (itemList.Contains(itemName) && !value)
     {
         itemList.Remove(itemName);
     }
     else if (!itemList.Contains(itemName) && value)
     {
         itemList.Add(itemName);
     }       
}

protected void button_OnClick( object sender, EventArgs e )
{
     List<string> itemList = (List<string>)Session["Items"];
     if (itemList != null)
     {
         foreach (string item in itemList)
         {
             // do something with the selected item
         }
     }
}

وتعطيل حالة العرض. في حال لا يمكن القيام به حاول استخدام الدورة لتخزين عرض حالة

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