TextBox输入框设置为只读后无法在.cs中获取该输入框值的解决办法

asp.net中textbox 設為“只讀”,客戶端無法輸入值了,但可以透過腳本更改textbox 的值,如︰
document.getElementById("textbox1").value="ddd";

【注意︰回傳后,在伺服器端,無法用如下方法取得客戶端更改后的值】︰
string aaa=textBox1.Text;
取得的還是原來的值,因為是只讀的文字框,asp.net只會從viewstate的取得值,不會再檢查文字框的新值,


要解決這個問題,不要設置文字框readonly屬性,而手動寫︰
textBox1.Attributes["readonly"]="readonly";
就可以了,

在頁面的Page_Load中
if(!IspostBack)
{
textBox1.Attributes["readonly"]="readonly";
}
不要在HTML中直接加readonly屬性
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsForms_Data { public partial class Form1 : Form { public Form1() { InitializeComponent(); //设置窗口标题 this.Text = "主窗口"; //设置居中弹窗 this.CenterToScreen(); //设置TextdataGridView的行无限添加 TextdataGridView.AllowUserToAddRows = true;//设置可以无限添加行 TextdataGridView.AllowUserToDeleteRows = true;//设置可以无限删除行 TextdataGridView.AllowUserToOrderColumns = true;//设置可以无限拖动列 //设置TextdataGridView的行列标题 TextdataGridView.ColumnCount = 5;//设置列数 //设置TextdataGridView的行列标题字体和颜色 TextdataGridView.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 10); //设置TextdataGridView的行列标题字体和颜色 TextdataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; TextdataGridView.Columns[0].Name = "年级"; TextdataGridView.Columns[1].Name = "班级"; TextdataGridView.Columns[2].Name = "编号"; TextdataGridView.Columns[3].Name = "姓名"; TextdataGridView.Columns[4].Name = "年龄"; // TextdataGridView.Columns[0].DefaultCellStyle.BackColor = Color.LightSkyBlue;//设置第一列的背景颜色 TextdataGridView.Columns[0].ReadOnly = true;//设置第一列为只读列 //设置TextdataGridView的行列宽度 TextdataGridView.Columns[0].Width = 127; TextdataGridView.Columns[1].Width = 127; TextdataGridView.Columns[2].Width = 127; TextdataGridView.Columns[3].Width = 127; TextdataGridView.Columns[4].Width = 127; //设置TextdataGridView的行高 TextdataGridView.RowHeadersDefaultCellStyle.Font = new Font("宋体", 10); TextdataGridView.RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; TextdataGridView.RowTemplate.Height = 25; //设置TextdataGridView的单元格内容对齐方式 TextdataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; TextdataGridView.DefaultCellStyle.Font = new Font("宋体", 10); //设置TextdataGridView的单元格编辑框类型 TextdataGridView.EditMode = DataGridViewEditMode.EditOnEnter; //设置TextdataGridView的单元格内容不可编辑 TextdataGridView.ReadOnly = true; //设置点击单元格时选中整行 TextdataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //设置交替行的背景颜色 TextdataGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.Red; //设置行不显示边框 TextdataGridView.EnableHeadersVisualStyles = false; //设置内容 TextdataGridView.Rows.Add("一年级", "1班", "1001", "小明", "10岁"); } private void button_add_Click(object sender, EventArgs e) { StudentAdd studentAdd = new StudentAdd(); studentAdd.Show(); } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsForms_Data { public partial class StudentAdd : Form { private bool isDragging = false;//是否正在拖动 private Point startPoint = new Point(0, 0);//鼠标按下时的位置 public StudentAdd() { InitializeComponent(); button_Exc.BackColor = Color.FromArgb(255, 102, 102); //设置居中弹窗 this.CenterToScreen(); //设置textBox_输入框中的字,并设置字体透明度 textBoxAdd.Text = "请输入内容"; textBoxAdd.ForeColor = Color.Gray; textBoxAdd.BackColor = Color.White; //当鼠标点击到textBox_输入框时,字体自动消失 textBoxAdd.MouseClick += (s, e) => { if (textBoxAdd.Text == "请输入内容") { textBoxAdd.Text = ""; textBoxAdd.ForeColor = Color.Black; } }; } private void button1_Click(object sender, EventArgs e) { //获取输入框中的数据 string date = textBoxAdd.Text; //重置输入框中的数据 textBoxAdd.Text = "请输入内容"; textBoxAdd.ForeColor = Color.Gray; textBoxAdd.BackColor = Color.White; //判断是否为空 if(date == "" || date == "请输入内容"){ MessageBox.Show("请输入要添加的数据"); return; } // 关闭当前窗体 this.Close(); } } } 如何在StudentAdd 第二个窗口输入的数据点击按钮添加到Form1第一个窗口中的TextdataGridView.Rows中,源程序不用动,请沿着button1_Click继续完成我所说的要求
最新发布
09-10
using Opc.Ua; using Opc.Ua.Client; using OpcUaHelper; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } OPCUAHelper oPCUA; private void button1_Click(object sender, EventArgs e) { string serverUrl = "opc.tcp://192.168.0.1:4840"; oPCUA = new OPCUAHelper(); oPCUA.OpenConnectOfAnonymous(serverUrl); loop1(); } private void button2_Click(object sender, EventArgs e) { oPCUA.CloseConnect(); } bool a1 = false; int a2 = 0; int a3 = 0; float a4 = 0; string a5 = ""; string a6 = ""; int a7 = 0; int a8 = 0; int a9 = 0; int a10 = 0; private string[] MonitorNodeTags = null; private void button3_Click(object sender, EventArgs e) { //单节点读取 DataValue a21 = oPCUA.GetCurrentNodeValue ("ns=3;s=\"数据块_1\".\"Static_1\""); a1 = oPCUA.GetCurrentNodeValue<bool>("ns=3;s=\"数据块_1\".\"Static_1\""); a2 = oPCUA.GetCurrentNodeValue<short>("ns=3;s=\"数据块_1\".\"Static_2\""); a3 = oPCUA.GetCurrentNodeValue<int>("ns=3;s=\"数据块_1\".\"Static_3\""); a4 = oPCUA.GetCurrentNodeValue<float>("ns=3;s=\"数据块_1\".\"Static_4\""); a5 = oPCUA.GetCurrentNodeValue<string>("ns=3;s=\"数据块_1\".\"Static_5\"");//string a6 = oPCUA.GetCurrentNodeValue<string>("ns=3;s=\"数据块_1\".\"Static_6\"");//string a7 = oPCUA.GetCurrentNodeValue<int>("ns=3;s=\"OPC通讯数据块\".\"A1\"[3]"); a8 = oPCUA.GetCurrentNodeValue<short>("ns=3;s=\"OPC通讯数据块\".\"c2\".\"A2\""); a9 = oPCUA.GetCurrentNodeValue<int>("ns=3;s=\"OPC通讯数据块\".\"c2\".\"A4\"[1]"); a10 = oPCUA.GetCurrentNodeValue<int>("ns=3;s=\"数据块_1\".\"Static_7\"[1000]");//string //读取后展示到文本框 textBox1.Text = a1.ToString(); textBox2.Text = a2.ToString(); //// 添加所有的读取的节点,此处的示例是类型不一致的情况 List<NodeId> nodeIds = new List<NodeId>(); nodeIds.Add(new NodeId("ns=3;s=\"数据块_1\".\"Static_1\"")); nodeIds.Add(new NodeId("ns=3;s=\"数据块_1\".\"Static_2\"")); nodeIds.Add(new NodeId("ns=3;s=\"数据块_1\".\"Static_3\"")); nodeIds.Add(new NodeId("ns=3;s=\"数据块_1\".\"Static_4\"")); nodeIds.Add(new NodeId("ns=3;s=\"数据块_1\".\"Static_5\"")); nodeIds.Add(new NodeId("ns=3;s=\"数据块_1\".\"Static_6\"")); //// 批量读 Dictionary<string, DataValue> dataValues = oPCUA.GetBatchNodeDatasOfSync(nodeIds); //单节点订阅 A是字典的Key,可以随便定义, 只用执行一次,发生改变会调用 回调函数 oPCUA.SingleNodeIdDatasSubscription("A", "ns=3;s=\"数据块_1\".\"Static_1\"", SubCallback); //1-取消单节点数据订阅 取消订阅 把Key传入参数 oPCUA.CancelSingleNodeIdDatasSubscription("A"); // 多个节点的订阅 MonitorNodeTags = new string[] { "ns=3;s=\"数据块_1\".\"Static_2\"", "ns=3;s=\"数据块_1\".\"Static_3\"", "ns=3;s=\"数据块_1\".\"Static_4\"", "ns=3;s=\"数据块_1\".\"Static_5\"", "ns=3;s=\"数据块_1\".\"Static_7\"[1000]", }; oPCUA.BatchNodeIdDatasSubscription("B", MonitorNodeTags, SubCallback); } //1-单节点数据订阅的回调函数 private void SubCallback (string key, MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs args) { if (InvokeRequired) { Invoke(new Action<string, MonitoredItem, MonitoredItemNotificationEventArgs>(SubCallback), key, monitoredItem, args); return; } if (key == "A") { // 如果有多个的订阅都关联了当前的方法,可以通过key和monitoredItem来区分 MonitoredItemNotification notification = args.NotificationValue as MonitoredItemNotification; if (notification != null) { textBox1.Text = notification.Value.WrappedValue.Value.ToString(); } } else if (key == "B") { // 需要区分出来每个不同的节点信息 MonitoredItemNotification notification = args.NotificationValue as MonitoredItemNotification; if (monitoredItem.StartNodeId.ToString() == MonitorNodeTags[0]) { textBox2.Text = notification.Value.WrappedValue.Value.ToString(); } else if (monitoredItem.StartNodeId.ToString() == MonitorNodeTags[1]) { textBox3.Text = notification.Value.WrappedValue.Value.ToString(); } else if (monitoredItem.StartNodeId.ToString() == MonitorNodeTags[2]) { textBox4.Text = notification.Value.WrappedValue.Value.ToString(); } else if (monitoredItem.StartNodeId.ToString() == MonitorNodeTags[3]) { textBox5.Text = notification.Value.WrappedValue.Value.ToString(); } else if (monitoredItem.StartNodeId.ToString() == MonitorNodeTags[4]) { textBox6.Text = notification.Value.WrappedValue.Value.ToString(); } else if (monitoredItem.StartNodeId.ToString() == MonitorNodeTags[5]) { textBox7.Text = notification.Value.WrappedValue.Value.ToString(); } } } private void loop1() { Task.Run(() => { while (true) { bool isconn = oPCUA.ConnectStatus; this.Invoke(new Action(() => { if (isconn) { label1.BackColor = Color.Green; } else { label1.BackColor = Color.Red; } textBox1.Text = a1.ToString(); textBox2.Text = a2.ToString(); textBox3.Text = a3.ToString(); textBox4.Text = a4.ToString(); textBox5.Text = a5.ToString(); textBox6.Text = a6.ToString(); textBox7.Text = a7.ToString(); textBox8.Text = a8.ToString(); textBox9.Text = a9.ToString(); })); Thread.Sleep(1000); } }); } } }我的这段代码想加一个可视化的窗口来展示我读取的数据,并且能够增加一个能发送数据至plc的功能
08-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值