各位大侠请帮忙,MVC/MVP模式接口编译错误,没辙了!

kmcyz 2018-08-28 08:55:04
很简单的一个MVP接口实现:
//View接口
namespace WebClient1.Products.Views
{
public interface IProductNewView
{
List<Product> Products { set; }
}
}

//View实现
namespace WebClient1.Products.Views
{
public partial class ProductNew : Microsoft.Practices.CompositeWeb.Web.UI.Page, IProductNewView
{
private ProductNewPresenter _presenter;
private List<Product> _p=null;
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this._presenter.OnViewInitialized();
}
this._presenter.OnViewLoaded();
}

[CreateNew]
public ProductNewPresenter Presenter
{
get
{
return this._presenter;
}
set
{
if(value == null)
throw new ArgumentNullException("value");

this._presenter = value;
this._presenter.View = this;
}
}

// TODO: Forward events to the presenter and show state to the user.
// For examples of this, see the View-Presenter (with Application Controller) QuickStart:
public List<Product> Products
{
set
{
_p = value;
}
}
}
}

//Presenter
namespace WebClient1.Products.Views
{
public class ProductNewPresenter : Presenter<IProductNewView>
{

// NOTE: Uncomment the following code if you want ObjectBuilder to inject the module controller
// The code will not work in the Shell module, as a module controller is not created by default
//
private IProductsController _controller;
public ProductNewPresenter([CreateNew] IProductsController controller)
{
_controller = controller;
}

public override void OnViewLoaded()
{
// TODO: Implement code that will be executed every time the view loads
View.Products = _controller.Products;
}
}
}

编译错误:
错误 2 “WebClient1.Products.Views.ProductNew”不实现接口成员“WebClient1.Products.Views.IProductNewView.Products”。“WebClient1.Products.Views.ProductNew.Products”无法实现“WebClient1.Products.Views.IProductNewView.Products”,因为它没有匹配的返回类型“System.Collections.Generic.List<WebClient1.Products.Interface.Product>”。 c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\webclient1\6dba2d22\5c066a95\App_Web_1wkctjkb.2.cs 15
...全文
198 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmcyz 2018-08-29
  • 打赏
  • 举报
回复
问题已解决,是类定义重复的问题,接口实现的项目下也有个Product类所致
kmcyz 2018-08-28
  • 打赏
  • 举报
回复
在view里实现了啊:
public List<Product> Products
{
set
{
_p = value;
}
}
正怒月神 版主 2018-08-28
  • 打赏
  • 举报
回复
他不是说了吗,List<Product> Products 没实现
kmcyz 2018-08-28
  • 打赏
  • 举报
回复
一上午都没人理,大侠都跑了吗?
kmcyz 2018-08-28
  • 打赏
  • 举报
回复
@正怒月神 不好意思,可能理解错了你的意思
Product是另一个项目下WebClient1.Products.Interface的实体类,上面的代码引用using WebClient1.Products.Interface;
kmcyz 2018-08-28
  • 打赏
  • 举报
回复
是的,都是namespace WebClient1.Products.Views
正怒月神 版主 2018-08-28
  • 打赏
  • 举报
回复
引用 7 楼 kmcyz 的回复:
我也试过在其他单纯的环境下一样的代码好像也没问题

报错:因为它没有匹配的返回类型
你看看接口的product和实现的product是同一个命名空间下的吗?
kmcyz 2018-08-28
  • 打赏
  • 举报
回复
我也试过在其他单纯的环境下一样的代码好像也没问题
kmcyz 2018-08-28
  • 打赏
  • 举报
回复
@正怒月神
刚才按你说的方法实现了接口:
public List<Product> Products
{
set { throw new NotImplementedException(); }
}
但还是报跟手动实现一样的编译错误:
错误 2 “WebClient1.Products.Views.ProductNew”不实现接口成员“WebClient1.Products.Views.IProductNewView.Products”。“WebClient1.Products.Views.ProductNew.Products”无法实现“WebClient1.Products.Views.IProductNewView.Products”,因为它没有匹配的返回类型“System.Collections.Generic.List<WebClient1.Products.Interface.Product>”。 c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\webclient1\6dba2d22\5c066a95\App_Web_itb0m1at.4.cs 15
kmcyz 2018-08-28
  • 打赏
  • 举报
回复
@正怒月神
我这边是在ASP.net MVP模式下,并且在没有实现
public List<Product> Products
{
set
{
_p = value;
}
}
之前并不会出现你说的红色标识,而是出现如下错误:
错误 2 “WebClient1.Products.Views.ProductNew”不实现接口成员“WebClient1.Products.Views.IProductNewView.Products” c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\webclient1\6dba2d22\5c066a95\App_Web_4h42di3o.4.cs 15

双击错误回跳到 c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\webclient1\6dba2d22\5c066a95\App_Web_4h42di3o.4.cs文件中:

#pragma checksum "F:\smart\WCSF\WebClient1\WebSites\WebClient1\Products\ProductNew.aspx" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "9439D0F04298611883E1A78AE234C5C016C31012"
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------

namespace WebClient1.Products.Views {


public partial class ProductNew : System.Web.SessionState.IRequiresSessionState {


#line 7 "F:\smart\WCSF\WebClient1\WebSites\WebClient1\Products\ProductNew.aspx"
protected global::System.Web.UI.WebControls.GridView GridView1;

#line default
#line hidden


#line 17 "F:\smart\WCSF\WebClient1\WebSites\WebClient1\Products\ProductNew.aspx"
protected global::System.Web.UI.WebControls.DetailsView DetailsView1;

#line default
#line hidden
正怒月神 版主 2018-08-28
  • 打赏
  • 举报
回复
我这里测试并没有什么问题,

不过比较简单的解决方案,就是点击红色部分,出现小箭头,然后点一下,选择实现接口。你看看他出来的样子,把它自动实现的异常修改成你的处理逻辑就好了 。
public partial class ProductNew : Microsoft.Practices.CompositeWeb.Web.UI.Page, IProductNewView

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧