我在这里设置有一点问题我有一个.ascx
文件列表,他们都在计算控制器本身方面做了不同的任务.因此,在我的.aspx
页面上,我单击一个Ajax.ActionLink()
,这将.ascx
根据我单击的项目呈现该特定文件.其中.ascx
有1-3个事件将触发其中2个onclick
事件,1个事件onload
.该onclick
事件(S)更容易在我而言一起工作可以直接在控制事件硬编码像这样onclick="$("#toggleMe3").slideToggle("slow");"
和onload
必须运行时.ascx
加载我是在测试这个$(document).ready(function(){});
电话,这部作品在精细.aspx
页,但只要我尝试将它添加到.aspx
它没有加载的页面中,这是理想的,但是我不知道为什么不这样做.实际上,如果我直接插入到.ascx
页面中,那么脚本标签中没有任何内容可用,如果硬编码到控件的事件中,它们至少会有一些; 在onload
与onprerender
不火.
我快要疯了......
在我正在构建的应用程序中,我正在处理需要相互交互的两个动态添加的控件,但我已经将问题简化为一个简单的,因为我可以制作它的示例控件是静态加载的,它仍然存在同样的问题:调用委托时出现NullReferenceException.这是要点:
控制1
Partial Class Control1
Inherits System.Web.UI.UserControl
Private _delClicked As System.Delegate
Public WriteOnly Property UpdateLabel() As System.Delegate
Set(ByVal value As System.Delegate)
_delClicked = value
End Set
End Property
Protected Sub btnButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnButton.Click
Dim aObj(0) As Object
aObj(0) = 1
_delClicked.DynamicInvoke(aObj)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
控制2
Partial Class Control2
Inherits System.Web.UI.UserControl
Protected WithEvents Control1 As New Control1
Delegate Sub ChangeLabel(ByVal int As Integer)
Protected Sub Page_Init(ByVal sender As Object, ByVal e As …
Run Code Online (Sandbox Code Playgroud) vb.net asp.net user-controls delegates nullreferenceexception
在我的页面上,我得到了以下用户控件:
<div class="editFormDialog" style="display: none; font-size: 12px;">
<mm:Form ID="editUC" ShowCreateButton="false" ShowEditButton="true" runat="server" />
</div>
Run Code Online (Sandbox Code Playgroud)
这个UC有一个公共属性,它接受一个DataSet,并更新UC中的一些字段.
因此,当我按下我的页面上的按钮时,它会在UC上调用此属性,并且UC将使用DataSet中的数据进行更新.
到现在为止还挺好.当我希望UC成为jQuery UI对话框时出现问题.
首先我创建对话框:
$(document).ready(function() {
$('.editFormDialog').dialog({
autoOpen: false,
height: 700,
width: 780,
modal: true,
bgiframe: true,
title: 'Rediger',
open: function(type, data) {
$(this).parent().appendTo("form");
$(this).css('display', 'block');
}
});
});
Run Code Online (Sandbox Code Playgroud)
我不想在按钮上打开(这不是ASP.NET按钮,纯HTML):
$('#btnEdit').live('click', function() {
$('.editFormDialog').dialog('open');
});
Run Code Online (Sandbox Code Playgroud)
对话框打开,但UC不包含正确的数据.页面加载时,UC将使用默认数据进行更新.然后用户单击一个按钮,数据会发生变化但UC不会更新.它仍包含默认数据.那就是问题所在.
你知道为什么吗?
将非常感谢帮助!
我目前正在处理使用动态Web用户控件的应用程序的一部分,并且我在使用ViewState或其他一些不使用ViewState的方法重新实例化回发控件时遇到了一些麻烦.要求我在每次回发时查询数据库.
基本上我在我的页面上有一个用户控件,它包含一个用于保存可变数量的子用户控件的面板和一个显示"Add Control"的按钮,其功能非常自我解释.
子用户控件非常简单; 它只是一个删除按钮,一个下拉菜单和一个排成一排的时间选择器控件.只要用户单击父控件上的"添加控件"按钮,就会向包含子控件的面板添加新的"行".
我想要做的是能够添加和删除对该集合的控制,修改值,并执行我需要在内存中执行的任何操作,而无需对数据库进行任何调用.当我完成添加控件并填充其值时,我想单击"保存"以立即将控件中的所有数据保存/更新到数据库.目前我发现的唯一解决方案是简单地将每个帖子中的数据保存在数据库中,然后使用存储在数据库中的行来重新实例化回发上的控件.显然,这会强制用户根据自己的意愿保存对DB的更改,并且如果他们想要取消使用控件而不保存其数据,则必须进行额外的工作以确保删除先前提交的行.
根据我对使用动态控件的了解,我知道最好在生命周期的Init阶段将控件添加到页面,然后在加载阶段填充它们的值.我还了解到,确保您可以保持控件的视图状态的唯一方法是确保为每个动态控件提供唯一的ID,并确保在重新实例化控件时为其分配完全相同的ID.我还了解到,在生命周期的Init阶段之后,ViewState实际上才会被加载.这就是我的问题所在.如果我无法使用viewstate并且我不想对数据库执行任何调用,如何存储和检索这些控件的名称?是否可以使用ASP.net进行这种内存操作/批量保存值?
任何帮助是极大的赞赏,
麦克风
我注意到在System.Web.UI.WebControls命名空间中的大多数(如果不是全部)标准Web控件上,您可以添加所需的任何属性而不会使页面崩溃.
以asp:Button控件为例.
此代码完全有效:
<form runat="server">
<asp:Button runat="server" Text="Test button" crapAttribute="crapValue" />
</form>
Run Code Online (Sandbox Code Playgroud)
现在,我有一个自定义服务器控件,如果我添加任意属性,它会崩溃.它只接受定义了相应公共属性的属性.
我得到的错误是这样的"控件没有名为"crapAttribute"的公共属性.
我希望我的自定义控件接受任何属性而不会崩溃.我需要做些什么才能工作?
我看过Reflector中的标准控件,它们确实有各种各样的属性和东西,但是我看到的东西没有立即引起我的注意.
我的自定义控件继承自WebControl的价值.
因此,在下面的示例代码中,我创建了一个UserControl UserControldChild,它是主窗口Window1.xaml的子代.为什么该FindName()
方法无法在下面的代码中找到"myButton"?
这必须与WPF XAML NameScopes有关,但我还没有找到关于NameScope如何工作的好解释.有人可以开导我吗?
//(xml) Window1.xaml
<Window x:Class="VisualTreeTestApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:VisualTreeTestApp="clr-namespace:VisualTreeTestApplication"
Title="Window1" Height="400" Width="400">
<Grid>
<VisualTreeTestApp:UserControlChild/>
</Grid>
</Window>
//(c#) Window1.xaml.cs
namespace VisualTreeTestApplication
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Button btnTest = (Button)Application.Current.MainWindow.FindName("myButton");
// btnTest is null!
}
}
}
Run Code Online (Sandbox Code Playgroud)
UserControl如下:
//(wpf) UserControlChild.xaml
<UserControl x:Class="VisualTreeTestApplication.UserControlChild"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Grid x:Name="myGrid">
<Button x:Name="myButton" Margin="20" >Button</Button>
</Grid>
</UserControl>
//(c#) UserControlChild.xaml.cs (no changes) …
Run Code Online (Sandbox Code Playgroud) 我正在为我们的某个应用程序开发控件.该控件将当前聚焦的日显示为网格,X轴是一天中的时间.Y轴没有这样的比例,而是将要显示的项目分开.控件的整体外观与甘特图非常相似,显示了各种任务的时间.对于(非常粗略的)想法,请参阅下面的ascii(非)艺术.
8 9 10 11 12 1 2 3 4 5 6
-----------------------------------------------------------------------------
| | | | | | | | | | |
| ====================== | | | | | |
| | | ====================== | | | |
| | | | | | | ======== | |
| | | | ===========================================
| | | | | | | | | | |
Run Code Online (Sandbox Code Playgroud)
我将背景网格设计成可调整大小,并将"当前时间"指示器实现为垂直蓝线,以显示我们与任务相关的位置.调整控件大小后,将重新计算当前时间指示器的位置,以确保显示正确的时间.
我现在不确定的是如何实现代表任务项的水平条.我有一个具有开始时间,结束时间,名称和描述的任务实体,我希望控件包含这些实体的集合.我也喜欢这些实体来驱动显示器.
我对WPF的曝光非常有限,但过去我尝试可视化对象集合涉及使用listbox和datatemplates.如果可以将一个集合绑定到一个堆栈面板或类似的东西,这将是很好的,所以我可以像这样semothing.(我虽然StackPabnel因为它会为我处理垂直堆叠)
<UserControl declarations here... >
<UserControl.Resources>
<ObjectDataProvider x:Key="myCollection" />
</UserControl.Resources>
<Grid Name="myBackgroundGrid" …
Run Code Online (Sandbox Code Playgroud) 在我们的工作中,我们有一个争议正在进行,有些人想要创建用户控件,结合常用的控件,如标签和文本框,或标签和图像控件.就是这样的:
<StackPanel Orientation="Horizontal">
<Image Source="/Someimage/Somewhere.gif"/>
<Label>Some text, hyperlink, or other content</Label>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
并像这样使用它
<ImageLabel
HeaderImageSource="/Someimage/Somewhere.gif"
>
Some text, hyperlink, or other content
</ImageLabel>
Run Code Online (Sandbox Code Playgroud)
问题是,他们是否提供足够的封装和抽象来值得单独的用户控制?
我有一个UserControl,我希望能够有多个孩子。它的孩子已经有了StackPanel,所以我做错了什么?
最终,我希望控件自动包含其自己的某些子项,然后在使用时允许在其元素之一内放置更多子项。我尝试了MSDN的“如何覆盖逻辑树”,但没有成功。
提前致谢。
LayerPanelItem.xaml:
<UserControl x:Class="Controls.LayerPanelItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel></StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
Main.xaml:
<controls:LayerPanelItem>
<TextBlock>Test</TextBlock>
<TextBlock>Test</TextBlock> <!-- Error: The property 'Content' is set more than once. -->
</controls:LayerPanelItem>
Run Code Online (Sandbox Code Playgroud) 我有三个用户控件.以下是对它们的描述:1)第一个用户控件(ucCountry)包含组合框,它显示xml文件中的国家/地区名称.
2)第二个用户控制(ucChannelType)包含两个单选按钮,一个用于选择电视,另一个用于选择无线电频道类型.
3)第三个usercontrol(ucChannels)将填充ucCountry提供的国家名称和ucChannelType提供的类型的所有通道
现在,如何在表单中的这些用户控件之间进行通信.我需要将用户控件与表单分离.所以,我需要使用事件.但是如果ucCountry触发事件(比如说CountryChanged事件)并且ucChannels订阅事件,那么如何从ucChannelType获取通道类型.
提前致谢...
user-controls ×10
asp.net ×4
wpf ×4
c# ×2
jquery ×2
.net ×1
actionlink ×1
ajax ×1
asp.net-mvc ×1
children ×1
collections ×1
controls ×1
delegates ×1
dialog ×1
dynamic ×1
findname ×1
properties ×1
vb.net ×1
viewstate ×1
winforms ×1