【问题标题】:Passing object through ObjectDataSource Asp.net Error通过 ObjectDataSource Asp.net 错误传递对象
【发布时间】:2011-03-22 14:06:45
【问题描述】:

我正在做一个学校项目,我遇到了一个让我难过的错误。我正在使用实体框架、存储库模式和对象数据源。当我尝试使用产品 ID 外键(这是一个 url 参数)插入产品变体时,会发生错误。

错误

ObjectDataSource“ProductVariantObjectDataSource”找不到采用“FV_ProductVariant”类型参数的非泛型方法“InsertProductVariantByProductId”。

图片链接

http://i.stack.imgur.com/fJeR1.png

堆栈跟踪:

[InvalidOperationException:ObjectDataSource 'ProductVariantObjectDataSource' 找不到采用“FV_ProductVariant”类型参数的非泛型方法“InsertProductVariantByProductId”。] System.Web.UI.WebControls.ObjectDataSourceView.GetResolvedMethodData(Type type, String methodName, Type dataObjectType, Object oldDataObject, Object newDataObject, DataSourceOperation 操作) +1355789 System.Web.UI.WebControls.ObjectDataSourceView.ExecuteInsert(IDictionary 值)+339 System.Web.UI.DataSourceView.Insert(IDictionary 值,DataSourceViewOperationCallback 回调)+89 System.Web.UI.WebControls.DetailsView.HandleInsert(String commandArg, Boolean CauseValidation) +379 System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean CauseValidation, String validationGroup) +574 System.Web.UI.WebControls.DetailsView.OnBubbleEvent(对象源,EventArgs e)+95 System.Web.UI.Control.RaiseBubbleEvent(对象源,EventArgs args)+37 System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(对象源,EventArgs e)+112 System.Web.UI.Control.RaiseBubbleEvent(对象源,EventArgs args)+37 System.Web.UI.WebControls.LinkBut​​ton.OnCommand(CommandEventArgs e) +125 System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent(字符串 eventArgument)+169 System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)+9 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +176 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

aspx 页面中的对象数据源

    <asp:ObjectDataSource ID="ProductVariantObjectDataSource" runat="server" 
    DataObjectTypeName="FV_ProductVariant" InsertMethod="InsertProductVariantByProductId" 
    SelectMethod="GetProductVariantByProductId" TypeName="ProductBL">
    <InsertParameters>
        <asp:Parameter Name="productVariant" Type="Object" />
        <asp:QueryStringParameter Name="productId" QueryStringField="ProductId" 
            Type="Int32" />
    </InsertParameters>
    <SelectParameters>
        <asp:QueryStringParameter Name="productId" QueryStringField="ProductId" 
            Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

ObjectDataSource 插入的ProductBL

    public void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId)
{
    try
    {
        productRepository.InsertProductVariantByProductId(productVariant, productId);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

IRepository

    void InsertProductVariantByProductId(FV_ProductVariant productVariant, int ProductId);

实际存储库

    public void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId)
{
    try
    {
        productVariant.ProductVariantId = GenerateProductVariantID();
        productVariant.ProductId = productId;
        context.FV_ProductVariant.AddObject(productVariant);
        context.SaveChanges();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

【问题讨论】:

    标签: asp.net entity-framework repository objectdatasource


    【解决方案1】:

    Creating an ObjectDataSource Control Source Object

    如果ObjectDataSource 控件的源对象公开了可调用以检索和修改数据的公共静态方法(在Visual Basic 中为Shared),则ObjectDataSource 控件将直接调用这些方法。如果ObjectDataSource 控件必须创建源对象的实例才能进行方法调用,则该对象必须包含不带参数的公共构造函数。 ObjectDataSource 控件将在创建源对象的新实例时调用此构造函数。

    如果源对象不包含 没有的公共构造函数 参数,你可以创建一个实例 将使用的源对象 由ObjectDataSource 控件中的 ObjectCreating事件...

    另外,试着让你的方法static

    public static void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId)
    {
        try
        {
            productRepository.InsertProductVariantByProductId(productVariant, productId);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多