gpt4 book ai didi

asp.net - Request.Form "Collection is only readonly"尝试设置文本框内容时

转载 作者:行者123 更新时间:2023-12-01 11:57:31 24 4
gpt4 key购买 nike

保存列表中的值并工作正常。

 abc= (ABC)(Session["xml"]);

string ctrlStr = String.Empty;
foreach (string ctl in Page.Request.Form)
{
if (ctl.Contains("something"))
{
ctrlStr = ctl.ToString();
abc.student[0].marks[j].science.something.Value = Convert.ToDecimal(Request.Form[ctrlStr]);
}

当我点击相应动态文本框上的编辑按钮时想要从保存的对象中检索值....

 foreach (string ctl in Page.Request.Form)
{
if (ctl.Contains("studentname"))
{
ctrlStr = ctl.ToString();
(Request.Form[ctrlStr]) = abc.student[0].marks[x].science.studentname.ToString();---Gives an error stating the collection is only readonly
}
}

最佳答案

Request.Form — 与一般的 Request 对象一样 — 是只读的,反射(reflect)了这样一个事实,即当您响应请求时,请求本身不能改变。 ASP.NET 使用表单 POST 中的值在页面上创建服务器控件,这些控件允许您控制 input 和写入 Response< 的其他表单元素的值 对象。

在您的情况下,TextBox 控件是动态生成的,因此它们不会自动绑定(bind)到表单值——因此您的问题。您需要在创建控件时保留对控件的引用(或者之后使用 FindControl() 方法查找它们)并设置它们的 Text 属性。

(原文如下)

Controls 集合在页面构造的某个时刻变成只读的。你必须在那之前进行操作。我不记得是什么时候了,但是通过 OnPreRender 使用 OnLoad 是安全的。

您的代码从哪里触发?

更新: 好的,我明白你想做什么了。如果您正在处理服务器端控件(即由 ASP.NET 生成的控件),这将是最简单的。在您的 aspx(或 ascx)中看起来像这样):

<asp:TextBox runat="server" ID="studentname"/>

然后你可以像这样更新值:

abc = (ABC)(Session["xml"]);  
studentname.Text = abc.student[0].marks[j].science.something.Value.ToString();

这将自动设置学生姓名文本框的值,而无需搜索所有 Request.Form 项目。 (假设你在某处设置了 j...我不知道它的上下文。)

我不能从你的代码中确定,但看起来你可能只有一个“计划 HTML”输入,它看起来更像这样:

<input type="text" name="studentname"/>

在这种情况下,没有简单的方法来更新页面代码中的值,因此我首先要确保您使用的是服务器端控件。

关于asp.net - Request.Form "Collection is only readonly"尝试设置文本框内容时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com