سؤال

لدي التعليمة البرمجية التالية في برنامج EDIDITEMTEMPLATE الخاص بي:

<tr id="primaryGroupRow" runat="server">
  <td class="Fieldname">Primary Group:</td>
  <td><asp:DropDownList ID="iPrimaryGroupDropDownList" runat="server" DataSourceID="GroupDataSource" CssClass="PageText" 
DataTextField="sGroupName" DataValueField="iGroupID" SelectedValue='<%# Bind("iPrimaryGroup") %>'></asp:DropDownList></td>
</tr>

إذا قمت بإزالة RunAT = "Server" لصف جدول الجدول، فسيتم ربط حقل IPrimaryGroup بنسبة 100٪ وتم تمريره إلى طبقة منطق الأعمال بشكل صحيح. ولكن في حالة الكود أعلاه، يتم تمريرها بقيمة صفر.

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

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

المحلول 3

يبدو أن هذه الوظيفة هي حسب التصميم، على الرغم من أن هذا غير مؤكد تماما.

http://weblogs.asp.net/rajbk/archive/2009/08/03/formview-binding-gotcha.aspx.

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

لحسن الحظ، هناك حلوة. طريقة عملها هي إنشاء حدث للحصول على البند. سيكون لها توقيع مثل هذا:

protected void frmProfile_ItemUpdating(object sender, FormViewUpdateEventArgs e)

يمنحك هذا الوصول إلى FormViewupdateEventargs، والذي بدوره يسمح لك بإجراء تغييرات على قيم ObjectDataSource أثناء الطيران وقبل أن يضرب رمز Bll الخاص بك، كما يلي:

protected void frmProfile_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
    if (frmProfile.FindControl("iPrimaryGroupDropDownList") != null)
    {
        DropDownList iPrimaryGroupDropDownList = ((DropDownList)frmProfile.FindControl("iPrimaryGroupDropDownList"));
        e.NewValues["iPrimaryGroup"] = iPrimaryGroupDropDownList.Text;
    }
}

نصائح أخرى

إذا كان الأمان مصدر قلق ربما قد يعمل هذا بشكل أفضل

<tr>
  <td colspan='2'>
    <asp:panel runat='server' visible='<%= IsUserAdmin %>'>
      <table>
        <tr>
          <td class="Fieldname">Primary Group:</td>
          <td><asp:DropDownList ID="iPrimaryGroupDropDownList" runat="server" DataSourceID="GroupDataSource" CssClass="PageText" DataTextField="sGroupName" DataValueField="iGroupID" SelectedValue='<%# Bind("iPrimaryGroup") %>'></asp:DropDownList>
          </td>
        </tr>
      </table>
   </asp:panel>
 </td>

إذا لم أكن مخطئا، فلن يتم تقديم أي علامات داخل اللوحة إذا كان مرئيا = خطأ

لديك رصاصة في هذا:

قم بإزالة سمة RunAT = Server

تحديد فئة CSS

.hidden{ display:hidden;}

ثم قم بتعيين سمة الفصل بناء على ما إذا كان المستخدم هو المسؤول أم لا

<tr class='<%= if(IsUserAdmin) "" else "hidden" %>' >
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top