小编pat*_*jbs的帖子

如何使用单个值填充/实例化C#数组?

我知道C#中实例化的值类型数组会自动填充类型默认值(例如,对于bool为false,对于int为0等).

有没有办法使用不是默认值的种子值自动填充数组?之后是创建还是内置方法(比如Java的Arrays.fill())?假设我想要一个默认为true的布尔数组,而不是false.是否有内置的方法来执行此操作,或者您只需要使用for循环遍历数组?

 // Example pseudo-code:
 bool[] abValues = new[1000000];
 Array.Populate(abValues, true);

 // Currently how I'm handling this:
 bool[] abValues = new[1000000];
 for (int i = 0; i < 1000000; i++)
 {
     abValues[i] = true;
 }
Run Code Online (Sandbox Code Playgroud)

必须遍历数组并将每个值"重置"为true似乎是无效的.有没有办法解决?也许通过翻转所有价值观?

在输出这个问题并思考之后,我猜测默认值只是C#如何在幕后处理这些对象的内存分配的结果,所以我想这可能不可能做到这一点.但我仍然想知道!

c# arrays default-value

188
推荐指数
15
解决办法
23万
查看次数

Listview在回发后没有完全更新databind()

我有一个ListView控件,它表现出奇怪的行为 - 在回发后行只是部分更新.我希望这里有人可以解释为什么会出现这种情况.

我的listview DataSource绑定到存储在页面会话状态中的项列表.这是故意的,部分是为了超时过期的视图,因为多个用户查看数据.在普通的度假村操作中,通过javascript在页面上处理排序,并且通过回调使列表/会话数据顺序保持同步.回调还会检查权限级别.在更复杂的特定度假操作上,页面上的javascript对页面进行回发以处理排序逻辑.列表/会话在回调中更新,然后列表视图控件将反弹到数据.页面再次加载,行显示新订单.没问题,对吧?

问题是列表视图中的某些元素不会根据新订单更改值.虽然在页面上处理的超链接和文本(例如像<%#Eval("ProjectAbbrev")%>)被适当更新,但是通过OnItemDataBound事件方法设置其值的复选框,文字和下拉列表不是 - 它们保持不变"冻结"到位,即使单步执行代码显示该方法在回发期间运行,并且控件应该设置为新值.如果我去手动截断列表,说原始大小的一半,确定只重新填充那些项目,但复选框等仍然保留其原始值.

所以我的问题是:为什么这些元素不会与回发中的其他listview控件元素一起更新?我觉得我要么误解了ASP.NET中的页面生命周期,要么我遇到了某种bug.

此时我认为我将不得不在javascript中将更复杂的排序操作移动到页面,但这将是相当棘手的,我想尽可能避免这样做.


更新:我已经尝试将EnableViewState设置为false,但它不能解决这个问题.在任何情况下我都无法使用该策略,因为页面的其他部分(保存)最终依赖于读取视图状态.
更新:我提供了一些代码片段,希望他们可以对这个问题有所了解:

Page:HyperLink元素将在回发后正确更新,但在OnQueueRepeater_ItemDataBound方法中赋值的CheckBox将保持不变.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TextProcessorProjects.ascx.cs" Inherits="ETD.UI.Controls.TextProcessorProjects" %>

<asp:ListView ID="QueueListView" runat="server" OnItemDataBound="OnQueueRepeater_ItemDataBound">
 <ItemTemplate>
  <tr>
   <td><asp:HyperLink runat="server" ID="ProjectIDLink"><%# Eval("ProjectAbbrev") %></asp:HyperLink></td>
   <td><asp:CheckBox runat="server" ID="ScannedCheckBox" BorderStyle="None" /></td>
  </tr>
 </ItemTemplate>
</asp:ListView>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:在回发时,执行以下代码:

protected List<Book> QueueDataItems
{
 get { return (List<Book>)Session["Queue"]; }
 set { Session["Queue"] = value; }
}

else if (IsPostBack && !Page.IsCallback)
{
 // resort QueueDataItems List appropriately
 ResortQueue(Request.Params) 
 // rebind
 QueueListView.DataSource = QueueDataItems;
 QueueListView.DataBind();
}

protected void OnQueueRepeater_ItemDataBound(object …
Run Code Online (Sandbox Code Playgroud)

c# asp.net data-binding postback listview

5
推荐指数
1
解决办法
1万
查看次数

在ASP.NET webapp中,FindByIdentity因PricipalOperationException而失败

我在内部Web应用程序中使用System.DirectoryServices.AccountManagement时遇到了一个问题.错误不是很具描述性,但是这是正在发生的事情:

当我尝试验证AD中是否存在提供的用户ID时,我使用以下代码:

private bool IsWindowsIDValid(string strWindowsID) 
{ 
var context = new PrincipalContext(ContextType.Domain, "DOMAINSERVER", "DC=DOMAINNAME,DC=net"); 
var userPrincipal = UserPrincipal.FindByIdentity(context, strWindowsID); 
return (userPrincipal != null); 
} 
Run Code Online (Sandbox Code Playgroud)

但是,在第二行抛出异常,其中调用FindByIdentity.以下是异常详细信息:

消息:"发生了操作错误."

堆栈跟踪:

在System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()在System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()在System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()在System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()在系统System.DirectoryServices上的System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context,Type principalType,String identityValue)中的.DirectoryServices.AccountManagement.Principal.FindBdentIdentityWithTypeHelper(PrincipalContext context,Type principalType,Nullable`1 identityType,String identityValue,DateTime refDate) .AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context,String identityValue)at*****.IsWindowsIDValid(String strWindowsID)in*****.ascx.cs:line 193

如果我尝试检查PrincipalContext的ConnectedServer属性,也会发生同样的错误.但是,我可以尝试根据上下文验证凭据(使用context.ValidateCredentials()),它将通过正常.

关于可能发生的事情的任何想法?我可以在我的机器上的独立控制台脚本中运行此代码 - 当我尝试调试webapp时,这发生在VisualStudio内部的本地开发环境中.这可能是权限问题还是其他问题?我在这一点上很丢失.

我感谢任何帮助!

-Patrick

c# asp.net active-directory visual-studio

3
推荐指数
1
解决办法
6034
查看次数