簡體   English   中英

有沒有更好的方法呢? ASP.NET / C #/Code背后

[英]Is there a better way of doing this? ASP.NET/C#/Code Behind

我創建了這個方法,因此它會更新頁面上的LABEL。 我們這里有一堆復選框,表明這個人是否有任何限制。 當用戶登錄並看到復選框時,我希望標簽顯示已檢查的標簽,以便用戶更容易查看該人員的限制。

我是C#和ASP.NET的新手,我想知道的是,是否有更好/更容易/更有效的方法來解決這個問題? 我發現的第一件事是String.Concat,這就是我在下面的代碼中使用它的原因。 此外,我似乎無法獲得行返回(a(br /))在后面的代碼中工作(我明白(br /)將無法在后面的代碼中工作)。 我嘗試了很多不同的方法,似乎沒有工作,這就是我在字符串中拋出COMMA的原因。 有什么建議?

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);
}
  1. 使用StringBuilder構建字符串。 使用AppendLine創建新行。
  2. 將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這樣的數據綁定控件

參考

是的,如果您不使用它,可以在CheckBox的屬性(如ToolTip)中設置要附加到字符串的文本。 然后你可以使用這個循環:

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'有你想要的字符串;

嘗試在asp.net中的CheckBoxList控件。 示例: http//www.w3schools.com/aspnet/showasp.asp?filename = demo_checkboxlist

使用較少的行代碼可以獲得相同的結果。 我喜歡這種方式使用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());

正如評論中提出的,我認為復選框是最佳解決方案。

如果您需要換行符:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM