初学.net 不知道怎么写 写了也不知道对不对 请高手指教
controller代码 public ActionResult SearchIndex(string seltype, string title)
        {
           Models.UmUser.User user = new Models.UmUser.User();
           ..........
           DataSet ds; 
           OracleParameter[] pars = new OracleParameter[]
                {
                new OracleParameter("acount",OracleDbType.NVarchar2,20)
                };
            
            pars[0].Value = title;
            pars[0].Direction = ParameterDirection.Input;            
            try
            {
                ds = orh.ExecuteDataSet("pkg_ur_user.pkg_selLikeUserByAcount", "umuser", CommandType.StoredProcedure, pars);    //访问存储过程,根据acount查询用户
                ViewBag.viewds = ds;   //dataset 可以用viewbag这样传吗?
                                       //传过去以后在view中  SearchIndex.cshtml 怎么接收,怎么把数据显示呢
            }
            catch
            {}            return View(user);
        }

解决方案 »

  1.   

    viewBag 好像不能接收 dataset
    我修改了一下
    public ActionResult SearchIndex(string seltype, string title)
      {
      IList<User> user1 = new List<User>();//用 IList
      ..........
      DataSet ds;  
      OracleParameter[] pars = new OracleParameter[]
      {
      new OracleParameter("acount",OracleDbType.NVarchar2,20)
      }; 
      pars[0].Value = title;
      pars[0].Direction = ParameterDirection.Input
      try
      {
      ds = orh.ExecuteDataSet("pkg_ur_user.pkg_selLikeUserByAcount", "umuser", CommandType.StoredProcedure, pars); //访问存储过程,根据acount查询用户//将dataset放入dataview
    //然后将dataview中的内容add到ilist
    //这样就可以在return中使用 tolist()方法
    //主要做可以不?  System.Data.DataView catView =
                        //vds.Tables[0].DefaultView;
                            new System.Data.DataView(ds.Tables["TB_UR_USER"]);
                    foreach (System.Data.DataRowView rowView in catView)
                    {
                        User user2 = new User();
                        user2.Usercode = rowView[0].ToString();
                        user2.Nickname = rowView[1].ToString();
                        user2.Acount = rowView[2].ToString();                    user1.Add(user2);  }
      catch
      {}  return View(user1.ToList());
      }
      

  2.   

    在view视图代码:
    @model IEnumerable<hn12396.Models.UmUser.User>
    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <h2>SearchIndex</h2>@foreach (var item in Model)
    {
        <p>@item.Usercode</p>
        <p>@item.Nickname</p>
        <p>@item.Acount</p>
        <br />
    }
    还是请高手指点一下 这样写有没有错误
    为什么运行后还是显示不出查询的数据
      

  3.   

    是这样的,ViewBag.data=xxx;
    页面上
    var data= ViewBag.data as DataSet;
    当然 你要在页面上引用dataset的命名空间。
    using System.Data;好像是这个吧
      

  4.   

    同意4楼,另外也可以通过ViewData[""]=**;TempData[""]=**; return View[Model];方式返回到页面,关键是到了页面要进行数据转换。
      

  5.   

    我很不明白,你既然用MVC开发,居然还在用ADO.net来访问数据,你为什么不用实体框架,或者linq.
    return view(ds) 你要创建一个和SearchIndex()方法名相同的view视图,在创建视图的对话框中有个下拉选项选择list.人家微软都已经给你做好了,会自己生成一个table,展现你的数据。
      

  6.   

    用ADO.net访问数据没有问题。
    你的做法也没问题,主要是断点调试下,看看ds.Tables["TB_UR_USER"]里面有没有数据。
      

  7.   

    return View(Model);是action给view传值的一种方式,它的好处在于,在View里面可以为View的内置对象Model指定强类型,使用起来比较方便。另外,mvc中,ViewData是action传递到view里的缓存,里面可以放任何对象,例如:
    DataSet ds = ……;
    ViewData["key1"] = ds;在页面使用的使用:
    @{
        DataSet ds = ViewBag.key1 as DataSet; // 或者ViewData["key1"]
        // 操作ds
    }