- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个列出当前项目的页面,如果您选择其中一个项目,它会加载带有参数的同一页面并显示属于该项目的用户。出于某种原因,它有时(取决于项目)在用户名所在的文本框中显示项目名称。
protected void Page_Load(object sender, EventArgs e)
{
var dbProxy = new DatabaseProxy();
// No parameter, show project list
if (this.Request.QueryString["ProjectID"] == null)
{
var user = new UserContainer();
user.LoadUser(HttpContext.Current.User.Identity.Name);
List<ProjectContainer> projects = dbProxy.GetProjects(user.UserID, true);
foreach (ProjectContainer project in projects)
{
var linkButton = new Button {Text = project.ProjectName};
this.ProjectsPanel.Controls.Add(linkButton);
}
}
// We have a parameter, show users for project
else
{
int projectId = int.Parse(this.Request.QueryString["ProjectID"]);
this.LoadUsers(projectId);
}
}
LoadUsers 函数:
private void LoadUsers(int projectId)
{
var databaseProxy = new DatabaseProxy();
List<UserContainer> users = databaseProxy.GetUsersByProject(projectId);
foreach (UserContainer user in users)
{
var txtUsername = new TextBox();
txtUsername.Text = user.Username; // <- Shows projectname!
var txtUsername2 = new TextBox();
txtUsername2.Text = user.Username; // <- Shows username!
this.UserPanel.Controls.Add(txtUsername);
this.UserPanel.Controls.Add(txtUsername2);
}
}
HTML代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditUsers.aspx.cs" Inherits="xxx.EditUsers1" MasterPageFile="PageStructure.Master" %>
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlace">
<asp:Panel ID="Panel1" runat="server" style="padding-left: 25px">
<div style="margin-bottom: 50px">
<asp:Label ID="lblHeader" runat="server" Text="Benutzer verwalten" CssClass="PageHeader"></asp:Label>
</div>
<asp:Panel ID="UserPanel" runat="server"></asp:Panel>
<asp:Panel ID="ProjectsPanel" runat="server"></asp:Panel>
</asp:Panel>
</asp:Content>
母版页仅包含页眉和页脚以及不同页面的一些 JavaScript。
输出:
http://i.imgur.com/wAxTSjT.png
user 变量包含正确的值,在 LoadUsers 之后什么也没有发生。我什至可以添加一个空标签作为第一个元素,然后它会在第一个文本框中显示正确的用户名!我不知道为什么,但看起来它真的想要我添加的第一个元素中的项目名称。
还有它如何工作的例子:
private void LoadUsers(int projectId)
{
var databaseProxy = new DatabaseProxy();
List<UserContainer> users = databaseProxy.GetUsersByProject(projectId);
foreach (UserContainer user in users)
{
var lbl = new Label();
lbl.Text = ""; <- Stays invisible!
var txtUsername = new TextBox();
txtUsername.Text = user.Username; // <- Shows username!
var txtUsername2 = new TextBox();
txtUsername2.Text = user.Username; // <- Shows username!
this.UserPanel.Controls.Add(lbl);
this.UserPanel.Controls.Add(txtUsername);
this.UserPanel.Controls.Add(txtUsername2);
}
}
我想我可以找到一个解决方法,比如将它拆分为两个不同的网络表单,但我仍然想知道为什么我会得到错误的值。
最佳答案
问题是由控件的不同步 View 状态引起的。
在 ASP.NET 中,每个表单控件都有一个 View 状态来跟踪输入的值,以便在回发后重新加载页面时,它可以自动将以前的值填充到每个表单控件中。通常这会很好地工作,并且通常是所需的行为。但是,在某些情况下(例如这种情况),控件是动态生成的并且它们的值在从回发返回后发生更改,那么它们的 View 状态最终将覆盖值并因此导致问题。
要解决此问题,请为动态生成的控件禁用回发,如下所示:
foreach (UserContainer user in users)
{
var txtUsername = new TextBox();
txtUsername.EnableViewState = false;
txtUsername.Text = user.Username; // <- Shows projectname!
var txtUsername2 = new TextBox();
txtUsername2.EnableViewState = false;
txtUsername2.Text = user.Username; // <- Shows username!
this.UserPanel.Controls.Add(txtUsername);
this.UserPanel.Controls.Add(txtUsername2);
}
或者每次生成时给每个控件分配一个不同的ID,这样控件就永远不会匹配viewstate中保存数据的ID,像这样:
foreach (UserContainer user in users)
{
var txtUsername = new TextBox();
txtUsername.ID = Guid.NewGuid().ToString("N");
txtUsername.Text = user.Username; // <- Shows projectname!
var txtUsername2 = new TextBox();
txtUsername2.ID = Guid.NewGuid().ToString("N");
txtUsername2.EnableViewState = false;
txtUsername2.Text = user.Username; // <- Shows username!
this.UserPanel.Controls.Add(txtUsername);
this.UserPanel.Controls.Add(txtUsername2);
}
警告:如果您使用上述任何一种方法,控件的值将不会在回发或表单提交期间发回。因此,任何这些控件中的任何用户输入的值都将丢失。为避免此问题,请使用 Javascript 将这些值复制到表单提交时的隐藏控件(即不动态生成)。或者干脆不使用动态生成的控件(如果可能的话)。
有关 View 状态与动态控件的更多信息,请查看:http://msdn.microsoft.com/en-us/library/hbdfdyh7%28v=vs.100%29.aspx
关于c# - Textbox.Text 的值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23468405/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!