2011-03-22 96 views
1

我正在學校項目上工作,我遇到了一個讓我難堪的錯誤。我正在使用實體框架,存儲庫模式和對象數據源。當我嘗試使用產品ID外鍵插入產品變量(這是一個url參數)時,發生錯誤。通過ObjectDataSource傳遞對象Asp.net錯誤

錯誤

ObjectDataSource控件 'ProductVariantObjectDataSource' 找不到非泛型方法 'InsertProductVariantByProductId' 是一個類型爲 'FV_ProductVariant' 的參數。

鏈接圖像

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

堆棧跟蹤:

[出現InvalidOperationException:ObjectDataSource控件 'ProductVariantObjectDataSource' 找不到非泛型方法 'InsertProductVariantByProductId' 這需要一個類型的參數'FV_ProductVariant'。] 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 values)+339 System.Web.UI.DataSourceView.Insert(IDictionary values,DataSourceViewOperationCallback callback)+89 System.Web.UI.WebControls.DetailsView.HandleInsert(字符串commandArg,布爾的CausesValidation)379 System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs的,布爾的CausesValidation,字符串的ValidationGroup)574 的System.Web。 UI.WebControls.DetailsView.OnBubbleEvent(Object source,EventArgs e)+95 System.Web.UI.Control.RaiseBubbleEvent(Object source,EventArgs args)+37 System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(Object source ,EventArgs e)+112 System.Web.UI.Control.RaiseBubbleEvent(Object source,EventArgs args)+37 System.Web.UI.WebControls.LinkBut​​ton.OnCommand(CommandEventArgs e)+125 System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent( String eventArgument)+169 System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String 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(布爾includeStagesBeforeAsyncPoint,布爾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> 

ProductBL內的對象的數據源,其中的ObjectDataSource與

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; 
    } 
} 

回答

0

Creating an ObjectDataSource Control Source Object

如果針對ObjectDataSource控制源對象公開公共靜態方法(在Visual Basic共用),其可以被調用以檢索和修改數據,控件將直接調用這些方法。如果一個ObjectDataSource控件必須創建一個源對象的實例以進行方法調用,則該對象必須包含一個不帶參數的公共構造函數。當它創建源對象的新實例時,該控件將調用此構造函數。

如果源對象不包含 公共構造函數沒有 參數,你可以創建一個實例,將通過在 ​​事件ObjectDataSource控制使用 源對象的 ...

另外,請嘗試使您的方法static

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