首页新闻找找看学习计划

asp.net MVC中使用DataSet

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-28 11:10

DataSet可以当成内存中的数据库,但是在执行一个Action给DataSet赋值后,再执行另外一个Action,DataSet中的原有数据已经丢失,求大神详解。

aehyok的主页 aehyok | 小虾三级 | 园豆:1012
提问于:2012-12-27 16:49
< >
分享
最佳答案
0

暂时没有合适的答案

aehyok | 小虾三级 |园豆:1012 | 2012-12-28 11:09
其他回答(5)
0

这个 要了解 类的生命周期,如果跨页了,也要了解页面的生命周期

Qlin | 园豆:2403 (老鸟四级) | 2012-12-27 17:01

请问你使用过MVC没

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 17:03

@aehyok: 

使用过,知道一点,但是不是很熟。

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2012-12-27 17:03

@Qlin: 额 ,我也是刚用一段时间。

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 17:08

@aehyok: 

你还是 把代码 贴出,这样更清楚。

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2012-12-27 17:09

@Qlin: 

public class InputModelController : Controller
{
        public DataSet DsList = new DataSet();
  public ActionResult aa()
  {
    //给DsList赋值的代码
  }
public ActionResult bb()
  {
    在此获取DsList,但是结果为空
  }
}
我先执行aa的Action,然后执行bb的action但是发现DsList为空
支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 17:17

@aehyok: 

InputModelController  每次请求时,会实例化它,DsList都是新的,要不你就声明为 static变量

 
支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2012-12-27 17:19

@Qlin: 额 ,要是用static声明 那多个用户同时应用此变量的时候,应该会存在问题吧。

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 17:23

@aehyok: 

不缓存起来怎么会有值呢

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2012-12-27 17:26

@Qlin: 那多个用户的时候会不会有问题

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 17:36
0

建议你下个断点看看这个datset在什么时候值被清空了

我按理解,你应该是把他设为了当前controll的全局变量,然后在执行下一次action的时候执行过dataset =null

Rich.T | 园豆:3438 (老鸟四级) | 2012-12-27 17:05

我可以下断点,执行下一次action的时候dataset=null应该是在内部完成的 我看不到什么时候被清空的

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 17:14

@aehyok: 

public DataSet DsList = new DataSet();

很明显这行代码二次运行了

支持(0) 反对(0) Rich.T | 园豆:3438 (老鸟四级) | 2012-12-27 17:44
0

MVC我经常用,这个问题我这样跟你说吧,action是每一次的请求的处理,他是后台的方法,你在aa里面给dataset赋值,只有在相对应的页面里面取得dataset的值,在请求的时候,你又初始化了dataset,所以没有dataset中没有了值

收获园豆:10
凌风0113 | 园豆:212 (菜鸟二级) | 2012-12-27 17:30

嗯,有点明白了,那我怎么样将aa的dataset传给bb这个action里面。

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 17:34

@aehyok: 那你就需要写一个类,继承Controller,然后你的InputModelController继承你写的类,在你写的类里面声明dataset,在aa里面给dataset赋值,在bb里面取值。我现在用的是这个方法,希望你能采用

支持(0) 反对(0) 凌风0113 | 园豆:212 (菜鸟二级) | 2012-12-27 17:47

@凌风0113: 

public class BaseController : Controller

  protected DataSet ds=new DataSet(); 

具体应该怎么实现,我New了一个 还是不行,是不是因为每次都会new
支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-27 18:26

@aehyok: 不是要每次new出来,是public DataSet ds{ get; set; },你试试这样看能不能满足你的需求。多个用户登陆,每个用户都是一个客户端,所有不会有相互的影响。

支持(0) 反对(0) 凌风0113 | 园豆:212 (菜鸟二级) | 2012-12-28 10:37
0

不建议在MVC中还使用DataSet;

 

收获园豆:10
````` | 园豆:14268 (专家六级) | 2012-12-27 19:19
0

找个静态的变量设置吧,或者是cache存放

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-27 22:29

静态变量多用户登陆有木有问题

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2012-12-28 08:35

@aehyok:  如果你的dataset不是共用的,对于每个人,每次操作都不一样,那可以用cache来实现,或者是定义一个静态的字典类型。然后操作的时候lock一下

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-12-28 08:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册