我试图在我的asp.net应用程序中存储将IEnumerable类型的结果返回给viewstate的api调用的结果。执行行后 this.PendingApprovalUserChangeRequest = endingChangeRequest,尽管pendingApprovalUserChangeRequest包含值,但我在this.PendingApprovalUserChangeRequest中看到的值为null 可能是什么问题呢 ?
P4TICKETS
尽管真正的核心问题是根本使用ASP.NET Web窗体,但下一个潜在的问题是在getter / setter实现中使用ViewState。
这对类属性负有太多责任,并且将来对PendingApprovalUserChangeRequest
属性的用户隐藏实现魔术。
如果另一个开发人员想要使用PendingApprovalUserChangeRequest属性而不在ASP.NET上下文中使用并且ViewState不存在怎么办?
只需为您的课程声明您的财产:
protected IEnumerable<string> PendingApprovalUserChangeRequest { get; set; }
然后在服务/控制器/管理器中使用ViewState。
var result = Task.Run(async () => await service.GetPendingChangeRequest()).Result;
MyClass.PendingApprovalUserChangeRequest = result; //examples setting the property
ViewState["PendingApprovalUserChangeRequest"] = result; //if you need to store the result for View to use
DisplayUserChangeRequestsData(result); //call the function you mentioned in your comments
通过这种方式,您不必为获取/设置ViewState键"PendingApprovalUserChangeRequest"
的填充/填充程序而感到困惑。
这个类的实例在内存中保留其自身实例化之外的自身属性的概念是一种反模式,您应该考虑其他组件/机制来持久化包含“ PendingApprovalUserChangeRequest”属性的类的状态。您为什么不保留该类的实例?无论哪种方式,担心通过ViewState或其他模式担心其自身持久性的属性绝对是一个坏主意,容易出错,令人困惑且设计上有缺陷和令人头疼。