【问题标题】:Issue with disabled textboxes being re-enabled on form submit表单提交时重新启用禁用文本框的问题
【发布时间】:2016-08-02 18:00:13
【问题描述】:

请原谅我,但我对整个编程这件事还是新手,我无法找到更具体/更直接的问题来回答我的问题。

我有一个在 asp.net C# 中构建的表单,可以从数据库中提取数据。存储过程运行并在找到任何内容时自动填充一系列文本框 - 用户名、电子邮件、电话号码等。填充的字段随后被禁用,因此用户无法更改所输入的内容;如果需要,空字段仍可供用户填写。

但是,当用户提交表单时 - 如果验证失败 - 之前禁用的字段(带有数据的字段)将被启用,允许用户根据需要覆盖它们 - 但我需要防止这种情况发生;有没有办法阻止那些被我的原始数据禁用的字段在返回时重新启用?

我正在禁用按钮单击事件中的字段。这些字段在页面加载时被禁用:

protected void Page_Load(object sender, EventArgs e)
    {

        Page.Title = title;
        Literal formHeader = (Literal)this.Master.FindControl("formHeader");
        formHeader.Text = "Travel Booking Request";




    if (!Page.IsPostBack) 
            { 
              Load_FormDetails();
              Load_SeatingPreference();
              Load_UserResponses();
              Load_UndergroundTravelZones();

            }
        }
protected void Load_FormDetails()
    {
            string userName = "";
            string userPhone = "";
            string userTitle = "";
            string userEmail = "";
            List<KeyValuePair<string, string>> userDetails = Class1.GetUserDetails();
            var name = userDetails.Where(kvp => kvp.Key == "UserDisplayName").Select(kvp => kvp.Value).First();
            userName = name.ToString();
            var phone = userDetails.Where(kvp => kvp.Key == "UserLandline").Select(kvp => kvp.Value).First();
            userPhone = phone.ToString();
            var jobtitle = userDetails.Where(kvp => kvp.Key == "UserJobTitle").Select(kvp => kvp.Value).First();
            userTitle = jobtitle.ToString();
            var email = userDetails.Where(kvp => kvp.Key == "UserEmail").Select(kvp => kvp.Value).First();
            userEmail = email.ToString();
            txtUserName.Text = userName;

            if (txtUserName.Text != "")
            {
                txtUserName.Enabled = "false";
            }
            txtUserPhoneNumber.Text = userPhone;
            if (txtUserPhoneNumber.Text != "")
            {
                txtUserPhoneNumber.Enabled = "false";
            }
            txtUserJobTitle.Text = userTitle;
            if (txtUserJobTitle.Text != "")
            {
                pfptxtUserJobTitle.Enabled = "false";
            }
            txtUserEmail.Text = userEmail;
            if (txtUserEmail.Text != "")
            {
                txtUserEmail.Enabled = "false";
            }
        }

【问题讨论】:

  • 你在哪里添加 enabled=false ,粘贴一些代码
  • 对不起-我的错。我已经编辑了我的初始帖子以包含代码。
  • 何时启用TextBox
  • 如果它不从数据库返回数据,我希望它启用(例如,如果数据库中没有存储电话号码) - 当用户提交表单时,他们就是这样可以完成缺失的(空白)字段,并且可以捕获该数据以供下次使用。如果该数据已存在于数据库中并且已被拉出,我不希望启用这些字段 - 我不希望我的用户更新这些字段中的现有数据

标签: c# asp.net


【解决方案1】:

在 .aspx 页面中的文本框定义中添加 Readonly = true 或添加 enabled = false。

这将使文本框永久禁用

【讨论】:

  • 我已经尝试过了,但它仍然给了我相反的问题 - 如果我在 aspx 文件中禁用它们,然后如果从数据库中引入空白数据,则启用它们,它们是- 如果页面在提交时验证失败,则禁用。基本上我只希望这些字段包含从数据库带来的数据时被禁用。如果数据库无法填充字段(即没有存储电话号码),那么我希望用户能够在该字段中输入他们的号码。在我提交并且页面验证失败之前很好 - 在返回时,页面加载回其原始状态。
  • 我认为页面加载中缺少某些条件。您是否正确使用了 ispostback 属性?
  • 据我所知,是的,我有 - 正在加载的方法 (Load_FormDetails) 正在加载页面加载 - 我已经编辑了上面的代码以显示它在一审。
  • 在加载formdetails函数中..这个函数只会被第一次调用,不会因为提交按钮点击而加载页面。因此,在单击按钮时,它将再次重置所有内容。在 !ispostback 循环之外添加文本框禁用条件。
  • 很抱歉没有尽快回复,但这里的情况一直很疯狂。感谢 Ram,您在 !ispostback 之外添加条件的解决方案有效。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2011-02-04
相关资源
最近更新 更多