【问题标题】:Is there a better way of doing this? ASP.NET/C#/Code Behind有没有更好的方法来做到这一点? ASP.NET/C#/代码背后
【发布时间】:2013-02-16 09:13:20
【问题描述】:

我创建了这个方法,以便更新页面上的标签。我们这里有一堆复选框,指示此人是否有任何限制。当用户登录并看到复选框时,我希望标签显示已选中的复选框,以便用户更轻松地查看此人有哪些限制。

我是 C# 和 ASP.NET 的新手,我想知道,有没有更好/更简单/更有效的方法来解决这个问题?我发现的第一件事是 String.Concat,这就是我在下面的代码中使用它的原因。另外,我似乎无法在后面的代码中使用 line return (a (br /)) (我知道 (br /) 在后面的代码中不起作用)。我尝试了许多不同的方法,但似乎都没有奏效,这就是为什么我在字符串中添加了一个逗号。有什么建议吗?

protected void LblLimitsLabel()
{
    String strBend = "", strDryDust = "", strStanding = "", strHearing = "", strHeights = "", strHepatitis = "", strLifting = "", strMachines = "", strPulling = "", strPushing = "", strReaching = "", strSeizures = "", strSuddenTemp = "", strVisual = "", strWalking = "", strWheelchair = "", strHelmet = "", strOther = "";

   if (chkBend.Checked)
       strBend = "Bend/Stoop, ";

   if (chkDryDusty.Checked)
       strDryDust = "Dry/Dusty, ";

   if (chkHearing.Checked)
       strHearing = "Hearing, ";

   if (chkHeights.Checked)
       strHeights = "Heights, ";

   if (chkHepatitis.Checked)
       strHepatitis = "Hepatitis, ";

   if (chkLifting.Checked)
       strLifting = "Lifting, ";

   if (chkMachines.Checked)
       strMachines = "Machines, ";

   if (chkPulling.Checked)
       strPulling = "Pulling, ";

   if (chkPushing.Checked)
       strPushing = "Pushing, ";

   if (chkReaching.Checked)
       strReaching = "Reaching, ";

   if (chkSeizures.Checked)
       strSeizures = "Seizures, ";

   if (chkStanding.Checked)
       strStanding = "Standing, ";

   if (chkSuddenTemp.Checked)
       strSuddenTemp = "Sudden Temp. Changes, ";

   if (chkVisual.Checked)
       strVisual = "Visual, ";

   if (chkWalking.Checked)
       strWalking = "Walking, ";

   if (chkWheelchair.Checked)
       strWheelchair = "Wheelchair, ";

   if (chkHelmet.Checked)
       strHelmet = "Helmet, ";

   strOther = TextBox1.Text;

   LblLimits.Text = String.Concat(strBend, strDryDust, strStanding, strHearing, strHeights, strHepatitis, strLifting, strMachines, strPulling, strPushing, strReaching, strSeizures, strSuddenTemp, strVisual, strWalking, strWheelchair, strHelmet, strOther);
}

【问题讨论】:

  • 你的问题到底是什么?
  • 我正在寻找一种更有效的方法来执行此操作。程序员解决这个问题的最佳方法是什么。看起来我在下面得到了一些答案。我还想知道如何在单词之间换行。

标签: c# asp.net code-behind


【解决方案1】:
  1. 使用StringBuilder 构建字符串。使用 AppendLine 创建一个新行。
  2. 将 if 语句放在一行中。像这样的简短 if 语句会更容易阅读。
  3. 如果您需要在 ASP.NET 标签中出现新行,则需要嵌入 <br/> 标记。

    StringBuilder SB = new StringBuilder();
    
    if (chkBend.Checked) SB.AppendLine("Bend/Stoop, ");
    if (chkDryDusty.Checked) SB.AppendLine("Dry/Dusty, ");
    // and so on
    
    SB.Append(TextBox1.Text);
    LblLimits.Text = SB.ToString();
    

当您对 C# 和 ASP.NET 更加熟悉时,我建议您继续使用像 CheckBoxList 这样的数据绑定控件

参考文献

【讨论】:

  • 这也使得他关于换行的问题很容易用 stringbuilder 解决,也许在 SB.Append() 上添加换行?因为他真的想要它而不是逗号
  • 好点,如果他觉得合适,我添加了一个使用 AppendLine 的建议
  • 我对
    标签的嵌入感到困惑。我不能在后面的代码中做到这一点,对吧?理想情况下,我希望每个项目都列在新行上。我真的很喜欢这种方法..
  • 没关系,看起来你现在可以在那里使用它: if (chkBend.Checked) SB.Append("Bend/Stoop
    ");这行得通。谢谢!
【解决方案2】:

试试 asp.net 中的 CheckBoxList 控件。此处示例:http://www.w3schools.com/aspnet/showasp.asp?filename=demo_checkboxlist

【讨论】:

    【解决方案3】:

    是的,如果您不使用它,您可以在 CheckBox 的属性(如工具提示)中设置要附加到字符串的文本。 然后你可以使用这个循环:

    string s = "";
            foreach (Control item in this.Controls)
            {
                if (item is CheckBox)
                {
                    CheckBox temp = item as CheckBox;
                    if (temp.Checked)
                    {
                        s += temp.ToolTip + ", ";
                    }
                }
            }
    s = s.Substring(0,s.length-3);
    

    's' 有你想要的字符串;

    【讨论】:

    • 使用串联构建列表的一般问题是我们必须处理最后一个尾随分隔符。
    • @Laurent 不,你可以 Substring() 最后的结果
    【解决方案4】:

    您可以使用更少的行代码获得相同的结果。我喜欢以这种方式使用 List,因为我不必处理尾随分隔符。

    var checkBoxes = new CheckBox[] {chkBend, chkDryDusty, chkHearing, ...}
    var values = new string[] {"Bend/Stoop", "Dry/Dusty", "Hearing", ...}
    
    var selectedEntries = new List<string>();
    
    for(var i = 0; i < checkBoxes.Length; i++)
    {
        if (checkBoxes[i].Checked)
            selectedEntries.Add(values[i]);
    }
    
    if (TextBox1.Text != "")
        selectedEntries.Add(TextBox1.Text);
    
    LblLimits.Text = string.Join(", ", selectedEntries.ToArray());
    

    按照 cmets 的建议,我认为多选复选框是最好的解决方案。

    如果需要换行:

    LblLimits.Text = string.Join("<br/>", selectedEntries.ToArray());
    

    【讨论】:

    • 谢谢。我也要试试这个。我知道的越多越好。
    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多