1

objectDataSourceに接続されたformviewがあります。

これは、フォームビューの「EditItemTemplate」にある非常に簡単なコードであり、.aspxクラスに実装されています。

<EditItemTemplate>
    Var1: <asp:TextBox ID="txtVar1" runat="server" Text='<%# Bind("var1") %>'  />
    Var2: <asp:TextBox ID="txtVar2" runat="server" Text='<%# Bind("var2") %>'  />
    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="ButtonSave_Click" />
</EditItemTemplate>

「保存」を押すと、「var1」と「var2」のデータがオブジェクトとともに次の更新メソッドに渡されます。これは、ビジネスロジッククラスに実装されています。

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
public void UpdateMyObject(MyObject updatedObject)
{
    if (updatedObject.EntityState == EntityState.Detached)
            mContext.MyObjects.Attach(updatedObject);
        mContext.ObjectStateManager.ChangeObjectState(updatedObject, System.Data.EntityState.Modified);
        int numberOfAffectedRows = mContext.SaveChanges();
        if (numberOfAffectedRows == 0)
            throw new DataNotUpdatedException("No object updated!");
}

問題は、テキストボックスを介してユーザーに公開せずに、aspxからビジネスロジックに3番目の変数を渡す必要があるということです。これはGUIDであり、変更する必要はありません。現在のコードでは、「updatedObject」に割り当てられるGuidはゼロのみであり、オブジェクトの元のGuidではなく、<%#Bind(を使用してテキストボックスにバインドした場合に渡されます。 "entryGuid")%>。

それで、私の質問は、このGuid(または他の変数)を公開せずにビジネスロジックレイヤーに渡すにはどうすればよいですか?テキストボックスを介さずに、更新されたオブジェクトにデータをバインドするエレガントな方法はありますか?

ありがとう!

4

2 に答える 2

1

input type="hidden"を探していると思います

これにより、ユーザーからの入力が非表示になり、ポストバックで利用できるようになります。ユーザーは「コードを表示」すればそれを見ることができます。

于 2012-05-19T13:06:10.870 に答える
1

@tzerbの答えは例を省略しているので、私はそれを提供すると思いました。

<EditItemTemplate> 
    Var1: <asp:TextBox ID="txtVar1" runat="server" Text='<%# Bind("var1") %>'  /> 
    Var2: <asp:TextBox ID="txtVar2" runat="server" Text='<%# Bind("var2") %>'  /> 
    Var3: <asp:HiddenField id="hdnVar3" runat="server" Value='<%# Bind("var3") %>' />
    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="ButtonSave_Click" /> 
</EditItemTemplate> 
于 2012-05-19T13:13:52.457 に答える