FormViewコントロール「にrunat =サーバー」列内に含まれる値を渡していません

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

質問

私は私のFormViewコントロールのEditItemTemplateに次のコードを持っています

<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>
Iは、テーブルの行のためにrunat =「server」を削除した場合、

、次いでiPrimaryGroupフィールドは100%結合し、適切なビジネスロジックレイヤに渡されます。しかし、上記のコードの場合には、それはゼロの値が渡されます。

これがあるか、それを回避する方法をなぜ

誰も教えてもらえますか?これは、管理者または正規ユーザがそれを編集しているか否かに基づいて、このテーブルの行を非表示にする必要があるコントロールです。すなわち:いくつかのフィールドにのみ書き込み可能な管理され、ユーザが管理者でない場合、私はビューからコントロールを非表示したいと思います。

役に立ちましたか?

解決 3

それが正確に確認されていないのですが、この機能は、設計であることが表示されます。

のhttp://weblogs.asp .NET / rajbk /アーカイブ/ 2009/8月3日/ FormViewコントロール結合-gotcha.aspxする

あなたは、ネストされたコントロールを持っている場合は、双方向のデータバインディングが正常に動作するつもりはない、FormViewコントロールオブジェクトを使用している場合。あなたは、コード内のコントロールにアクセスすることができ、あなたがデータを取得することができますが、ちょうどそれがになっているように、自動的にあなたのビジネスロジック層(BLL)のバックエンドで値を更新するつもりはないです。

幸い、回避策があります。それが働いて取得する方法はItemUpdatingのイベントを作成することです。それは、このようなシグネチャを持つことになります:

protected void frmProfile_ItemUpdating(object sender, FormViewUpdateEventArgs e)

これは次のように順番に、あなたは彼らが飛行中にありながら、ObjectDataSourceの値に変更を加えることができ、彼らはあなたのBLLコードを打つ前にFormViewUpdateEventArgs、にアクセスできます:

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