MVC中如何让PartialViewResult调用的方法生效并返回数据?
问题分析与解决方案
嘿,我一眼就看出你代码里的核心问题了:你在Load方法里重新创建了一个全新的ClsS实例,但这个实例和你在Partial方法中声明的model是完全独立的两个对象!所以你在Load里给属性赋值的操作,根本不会影响到外面要返回的那个model,自然PartialView拿不到任何数据。
下面给你两种可行的修改方案:
方案1:让Load方法返回赋值后的ClsS实例
直接让Load负责创建并初始化ClsS对象,然后把它返回给Partial方法使用:
public PartialViewResult Partial(string id) { // 直接接收Load返回的已初始化对象 var model = Load(id); return PartialView("_Partial", model); } public ClsS Load(string id) { Sdetails sdetails = new Sdetails(); var model = new ClsS(); model.Name = sdetails.Namehead(id); model.Link = sdetails.LinkName(id); return model; // 返回已经赋值好的实例 }
方案2:将model作为参数传递给Load方法
因为ClsS是引用类型,传递给方法后修改它的属性会直接影响原对象:
public PartialViewResult Partial(string id) { var model = new ClsS(); // 把已经创建好的model传入Load方法 Load(model, id); return PartialView("_Partial", model); } public void Load(ClsS model, string id) { // 先做参数校验,避免空引用异常 if(model == null) throw new ArgumentNullException(nameof(model)); Sdetails sdetails = new Sdetails(); // 直接修改传入的model的属性,不需要重新new model.Name = sdetails.Namehead(id); model.Link = sdetails.LinkName(id); }
额外建议:简化代码(可选)
如果Load方法的逻辑并不需要在其他地方复用,其实可以直接把初始化逻辑写在Partial方法里,减少不必要的方法封装:
public PartialViewResult Partial(string id) { var sdetails = new Sdetails(); // 直接初始化model var model = new ClsS { Name = sdetails.Namehead(id), Link = sdetails.LinkName(id) }; return PartialView("_Partial", model); }
内容的提问来源于stack exchange,提问作者User9895
相关产品推荐
相关产品推荐

