如何加载模型并将模型传递给ascx控件?

时间:2012-10-30 18:04:16

标签: c# asp.net winforms .net-3.5

我有一个nestedGridTemplate,它包含一个列表对象。

            this.Gridparent.MasterTableView.NestedViewTemplate = new Custom14NestedTemplate(this.model.Material.First());

这会调用我的班级public class Custom14Template

这个班叫:

    public void InstantiateIn(System.Web.UI.Control container)
    {
        var myPage = new Page();
        Control c = myPage.LoadControl("~/Custom14/Templates/View.ascx");
        container.Controls.Add(c);

        var x = new Label();
        x.Text = string.Format("qty : {0}.<br />", this.MyMaterial.Quantity);
        container.Controls.Add(x);
    }

现在,我的ascx只包含这个:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="View.ascx.cs" Inherits="*snip*.Templates.View" %>

hello there

一切都正确显示

  [grid start]
  [item 1 : expanded]
     hello there qty : 23.
  [/item 1]
  [item 2 /]
  [item 3 /]
  [/grid]

我想将我的对象传递给我的ASCX,使用... old 等同于<%= html.EditorFor() %>(Asp.Net MVC)来构建我的html显示。而不是像我的标签那样创建元素并将它们添加到容器中(在c#中构建html会感到痛苦)。那可行吗?怎么样?

2 个答案:

答案 0 :(得分:0)

我根据需要改编了this answer(没有 ICustomControl ):

调用文件包含以下内容:

    public void InstantiateIn(System.Web.UI.Control container)
    {

       Page myPage = new Page();
       Control userControl = myPage.LoadControl("~/Templates/Edit.ascx");

       //this is the important part
       if (userControl is Edit)
       {
           Edit customControl = userControl as Edit;
           customControl.MyObject= this.PersistedObject;
       }

        container.Controls.Add(userControl);
    }

.ascx.cs也被修改了一下:

public partial class Edit : System.Web.UI.UserControl
{

    public Produit MyObject { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        this.product.Text = MyObject.ProductName;
        this.Production.Text = MyObject.Production.ToString();

    }
}

ascx只包含两个平原,常客asp:textbox(ID =产品和制作)。

答案 1 :(得分:0)

http://asp.net-tutorials.com/user-controls/using/“动态加载”尝试解决方案。在用户控件中传递变量信息或设置属性的简单解决方案