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 传递给业务逻辑,而不是通过文本框将其暴露给用户。它是一个 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 回答