【问题标题】:Using UniDynArray on ASP.net MVC view page在 ASP.net MVC 视图页面上使用 UniDynArray
【发布时间】:2013-03-20 02:14:11
【问题描述】:

谁能帮助我了解如何在 ASP.net MVC3 (MS Visual Studio 2010) 查看页面上使用 UniDynArray?

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

使用 UniDynArray 的原因是,我想将动态数组从 Controller 传递到 View 并返回到控制器。这样我就不必将每个字段都设置为 VIEWDATA 以便在 View 中使用。

【问题讨论】:

  • 1.我正在使用 UO.NET (UniVerse) 2. UniDynArray 是 U2.Data.Client.UO 命名空间下 U2.DATA.CLIENT.dll 的引用 3. 是的,我们正在使用 UniSubroutine(仅在控制器上) 4. 不,我不要使用 U2 插件
  • 我已经弄清楚如何将 UniDynArray 从 Controller 传递到 View 并将 View 传递到 Controller。您可以使用 • MVVM 模式 • ViewBag 模式 我认为您应该将 UniDynArray 展平为 .NET POCO 类或 .NET DataTable 对象。这将使您的工作变得轻松。请等待我的回复。我想以“文章”的方式(带有屏幕截图)回答这个问题,以便其他 U2 开发人员可以从中受益。我想介绍: • 带有 RAW UniDynArray 的 MVVM • 带有 RAW UniDynArray 的 ViewBag • 带有扁平 UniDynArray 的 MVVM(UniDynArray 到 DataTable) • 带有扁平 UniDynArray 的 MVVM(UniDynArray 到 POCO 类)
  • 非常感谢,拉詹。焦急地等待你的文章:D
  • 请看下面我的回答。稍后我将描述“MVVM Pattern (flatten UniDynArray, UniDynArray to .NET Object DataTable)”。

标签: asp.net-mvc-3 u2 universe uniobjects u2netdk


【解决方案1】:

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

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

在这篇文章中,我将回答 MVVM Pattern (Raw UniDynArray)。稍后我会介绍休息。

创建 ASP.NET MVC3 项目

创建模型

添加控制器

创建视图

打开“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 : 控制器 { // // GET: /MyUniDynArray/

    public ActionResult Index()
    {
        Customer c = new Customer();
        UniDynArray r = c.MyUniDynArray;

        var l = new CustomerViewModel(c);

        return View(l);

    }

}

}

打开“MyUniDynArray\Index.cshtml”并粘贴以下代码。 @Model 包含 ViewModel 对象 (UniDynArray)

@{ ViewBag.Title = "索引"; }

MyUniDynArray

​​>

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

@Model.MyCustomer.MyUniDynArray

​​>

打开“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>

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

在 MVC 视图中键入 UniDynArray

【讨论】:

  • 首先感谢您为获得结果所付出的努力,并通过逐步演练很好地粘贴它们,不胜感激。但是,我想在 View 中使用 UniDynArray,就像它在 Controller/Model 中的使用方式一样(例如,dim Variable as UniDynArray)
  • 这很简单。见下文。 @{ U2.Data.Client.UO.UniDynArray lvar = @Model.MyCustomer.MyUniDynArray;

    @lvar

    }
  • 在我的回答区查看屏幕截图。你可以在 MVC 视图中看到 Typed UniDynArray。
  • 我尝试在“查看”页面中键入命令,但我无法将“U2”添加到我的命名空间列表中(抱歉,无法发布图片,没有足够的声望点)。我已将 U2.Data.Client 添加到我的项目参考中。我在这里错过了什么吗?我应该将此 () 添加到我的 aspx 页面中吗?
  • 我想为您提供我的 MVVM 模式(Raw 和 Flatten)的示例源代码。您能否联系 U2 支持以便我们为您提供源代码?我们不需要这样做(
【解决方案2】:

在这篇文章中,我想描述“MVVM Pattern (flatten UniDynArray, UniDynArray to .NET Object Object)”。

创建模型

创建控制器

创建视图

打开模型文件(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 :控制器 { // // GET: /MyUniDynArrayController2/

    public ActionResult Index()
    {
        Customer2Repository lvar = new Customer2Repository();
        List<Customer2> lCustomer2List = lvar.CustomerList;


        var l = new CustomerViewModel2(lCustomer2List);

        return View(l);



    }

}

}

打开视图文件 (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>

打开“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>

运行应用程序并按“MyUniDynArray2”。您将看到 Flatten UniDynArray。基本上 UniDynArray 成为 .NET 对象数组(列表)

使用的宇宙子程序

SUBROUTINE MV_TO_DATASET_SELECT_SUBROUTINE(ARG_INPUT,ARG_OUTPUT)

x = ARG_INPUT

ARG_OUTPUT = "100":@VM:"101":@VM:"102":@VM:"103":@FM:"Nancy":@VM:"Andrew":@VM:"Janet" :@VM:"玛格丽特":@FM:"01/06/1991":@VM:"06/07/1996":@VM:"11/08/1999":@VM:"12/10/2001 "

返回

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多