我有一个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会感到痛苦)。那可行吗?怎么样?
答案 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/“动态加载”尝试解决方案。在用户控件中传递变量信息或设置属性的简单解决方案