我有一个formview,连接到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>
当按下“save”时,“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传递给业务逻辑,而不是通过文本框将其暴露给用户。这是一个Guid,没有必要改变它。 使用当前代码,分配给“updatedObject”的Guid只是零而不是对象的原始Guid,如果我使用&lt;%#Bind将它绑定到文本框,它已经过并且已经过了(“entryGuid”)%&gt;。
所以,我的问题是如何将这个Guid(或任何其他变量)传递给业务逻辑层,而不需要公开它?有没有一种优雅的方法可以将数据绑定到更新的对象而不是通过文本框?
谢谢!
答案 0 :(得分:1)
我想你正在寻找 输入类型=“隐藏”
这将隐藏用户的输入,并将在回发中提供。如果用户“查看代码”,用户将能够看到它。
答案 1 :(得分: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>