代码之家  ›  专栏  ›  技术社区  ›  cwkueh

在ASP.net MVC视图页面上使用UniDynArray

  •  2
  • cwkueh  · 技术社区  · 12 年前

    有人能帮助我如何在ASP.net MVC3(MS Visual Studio 2010)视图页上使用UniDynArray吗?

    我设法将引用(U2.Data.Client)添加到项目中,并且我可以在Controller中使用它,但不能在View页面中使用它。

    使用UniDynArray的原因是,我想将一个动态数组从Controller传递到View,然后再传递回Controller。这样,我就不必为了在视图中使用而将每个字段都设置为VIEWDATA。

    2 回复  |  直到 12 年前
        1
  •  3
  •   Rajan Kumar    12 年前

    我想解释一下如何通过以下方式将UniDynArray从Controller传递到MVC视图:

    1. MVVM模式(原始UniDynArray)
    2. ViewBag模式(原始UniDynArray)
    3. MVVM模式(将UniDynArray、UniDynAarray展平为.NET对象数据表)
    4. MVVM模式(将UniDynArray、UniDynAarray展平为POCO对象)

    在这篇文章中,我将回答MVVM模式(Raw UniDynArray)。稍后我将报道其余内容。

    创建ASP.NET MVC3项目 pic1

    创建模型 pic2

    pic3

    添加控制器 pic4

    pic5

    创建视图 pic5a

    pic5b

    打开CustomerViewModel.cs文件并粘贴以下代码

    命名空间Test_MvcApplication.Models {

    public class CustomerViewModel
    {
        public Customer MyCustomer { get; set; }
        public CustomerViewModel(Customer pCustomer)
        {
            MyCustomer = pCustomer;
        }
    }
    
    public class Customer
    {
        private UniDynArray myVar;
        public UniDynArray MyUniDynArray
        {
            get
            {
                U2ConnectionStringBuilder conn_str = new U2ConnectionStringBuilder();
                conn_str.UserID = "user";
                conn_str.Password = "pass";
                conn_str.Server = "localhost";
                conn_str.Database = "HS.SALES";
                conn_str.ServerType = "UNIVERSE";
                conn_str.AccessMode = "Native";   // FOR UO
                conn_str.RpcServiceType = "uvcs"; // FOR UO
                conn_str.Pooling = false;
                string s = conn_str.ToString();
                U2Connection con = new U2Connection();
                con.ConnectionString = s;
                con.Open();
                Console.WriteLine("Connected.........................");
    
                // get RECID
    
                UniSession us1 = con.UniSession;
    
                UniSelectList sl = us1.CreateUniSelectList(2);
    
                // Select UniFile
                UniFile fl = us1.CreateUniFile("CUSTOMER");
                fl.RecordID = "2";
                myVar = fl.Read();
                return myVar;
            }
            set
            {
                myVar = value;
            }
        }
    }
    

    }

    打开MyUniDynArrayController.cs并粘贴以下代码。正如您所注意到的,您正在将对象传递到视图,并且该对象具有UniDynArray

    命名空间Test_MvcApplication.Controllers { 公共类MyUniDynArrayController:控制器 { // //获取:/MyUniDynArray/

        public ActionResult Index()
        {
            Customer c = new Customer();
            UniDynArray r = c.MyUniDynArray;
    
            var l = new CustomerViewModel(c);
    
            return View(l);
    
        }
    
    }
    

    }

    打开MyUniDynArray\Index.chtml并粘贴以下代码@模型包含ViewModel对象(UniDynArray)

    @{ ViewBag.Title=“索引”; }

    我的UniDynArray

    ==================

    @型号.MyCustomer.MyUniDynArray

    pic8

    打开Shared\Layout.cshtml文件并添加以下行

    <nav>
                <ul id="menu">
                    <li>@Html.ActionLink("MyUniDynArray", "Index", "MyUniDynArray")</li>
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
    
                </ul>
     </nav>
    

    pic9

    运行应用程序,然后按MyUniDynArray。您将在视图中看到UniDynArray。我不确定你将如何将UniDynArray与HTML5/Razor控件绑定。这就是为什么我建议你压平UniDynArray。

    pic6

    pic7

    MVC视图中的类型化UniDynArray

    enter image description here

        2
  •  0
  •   Rajan Kumar    12 年前

    在这篇文章中,我想描述“MVVM模式(将UniDynArray、UniDynAarray展平为.NET对象对象)”。

    创建模型 pic1

    创建控制器 pic2

    创建视图 pic3

    打开模型文件(Models\CustomerViewModel2.cs)并粘贴坐标

    命名空间Test_MvcApplication.Models {

    public class Customer2
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public DateTime HireDate { get; set; }
    }
    
    public class Customer2Repository
    {
        private List<Customer2> m_custList = new List<Customer2>();
        public  List<Customer2> CustomerList 
        {
    
            get
            {
                U2ConnectionStringBuilder l = new U2ConnectionStringBuilder();
                l.Server = "localhost";
                l.UserID = "user";
                l.Password = "pass";
                l.Database = "HS.SALES";
                l.ServerType = "universe";
                string lconnstr = l.ToString();
                U2Connection c = new U2Connection();
                c.ConnectionString = lconnstr;
                c.Open();
                U2Command command = c.CreateCommand();
                command.CommandText = "CALL MV_TO_DATASET_SELECT_SUBROUTINE(?,?)"; // UniVerse subroutine
                command.CommandType = CommandType.StoredProcedure;
                U2Parameter p1 = new U2Parameter();
                p1.Direction = ParameterDirection.InputOutput;
                p1.Value = "";
                p1.ParameterName = "@arg1";
    
                U2Parameter p2 = new U2Parameter();
                p2.Direction = ParameterDirection.InputOutput;
    
                p2.Value = "";
                p2.ParameterName = "@arg2";
    
    
                command.Parameters.Add(p1);
                command.Parameters.Add(p2);
    
                command.ExecuteNonQuery();
    
    
                string lRetValue = (string)command.Parameters[1].Value;
    
    
                //command.Parameters[1].MV_To_POCO<int>();
                m_custList = command.Parameters[1].MV_To_POCO<Customer2>();
    
    
    
    
                return m_custList;
            }
    
    
            set
            {
                m_custList = value;
            }
    
        }
    }
    
    public class CustomerViewModel2
    {
       public Customer2 MyCustomer2 { get; set; }
       public List<Customer2> CustomerList { get; set; }
        public CustomerViewModel2(Customer2 pCustomer)
        {
            MyCustomer2 = pCustomer;
        }
        public CustomerViewModel2(List<Customer2> pCustomerList)
        {
            CustomerList = pCustomerList;
        }
    }
    

    }

    打开控制器文件(Controllers\MyUniDynArray2Controller.cs)

    命名空间Test_MvcApplication.Controllers { 公共类MyUniDynArray2Controller:控制器 { // //获取:/MyUniDynArrayController2/

        public ActionResult Index()
        {
            Customer2Repository lvar = new Customer2Repository();
            List<Customer2> lCustomer2List = lvar.CustomerList;
    
    
            var l = new CustomerViewModel2(lCustomer2List);
    
            return View(l);
    
    
    
        }
    
    }
    

    }

    pic4

    打开视图文件(Views\MyUniDynArray2\Index.cshtml)

    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    <table border="1"> 
    <tr> 
        <td>ID</td> 
        <td>Name</td> 
        <td>HireDate</td> 
    
    </tr> 
    @foreach (var myItem in Model.CustomerList)
    {
    
        <tr> 
            <td>@myItem.ID</td> 
            <td>@myItem.Name</td> 
            <td>@myItem.HireDate</td> 
    
        </tr> 
    }
    </table>
    

    pic5

    打开Shared\Layout.cshtml文件并添加以下行

    <nav>
                    <ul id="menu">
                        <li>@Html.ActionLink("MyUniDynArray2", "Index", "MyUniDynArray2")</li>
                        <li>@Html.ActionLink("MyUniDynArray", "Index", "MyUniDynArray")</li>
                        <li>@Html.ActionLink("Home", "Index", "Home")</li>
                        <li>@Html.ActionLink("About", "About", "Home")</li>
    
                    </ul>
    </nav>
    

    pic6

    运行应用程序,然后按MyUniDynArray2。您将看到压扁UniDynArray。基本上,UniDynArray变成了.NET对象的数组(列表)

    pic7

    使用的UniVerse子程序

    SUBROUTINE MV_TO_DATASET_SELECT_SUBROUTINE(ARG_INPUT,ARG_OUTPUT)
    

    x=ARG_输入

    ARG_OUTPUT=“100”:@VM:“101”:@VM:“102”:@VM:“103”:@FM:“Nancy”:@虚拟机:“Andrew”:@VM:“Janet”:@VM:“Margaret”:@FM:“01/06/1991”:@virtual:“06/07/1996”:@vrm:“11/08/1999”:@vom:“12/10/2001”

    返回