Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 老子影院伦不卡欧美,婷婷综合网站,中文字幕不卡

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          ASP.NET Web Forms-ArrayLis

          ASP.NET Web Forms-ArrayList 對象

          rrayList 對象是包含單個數據值的項目的集合。


          ArrayList DropDownList

          ArrayList RadioButtonList


          創建 ArrayList

          ArrayList 對象是包含單個數據值的項目的集合。

          通過 Add() 方法向 ArrayList 添加項目。

          下面的代碼創建了一個名為 mycountries 的 ArrayList 對象,并添加了四個項目:

          <script runat="server">

          Sub Page_Load

          if Not Page.IsPostBack then

          dim mycountries=New ArrayList

          mycountries.Add("Norway")

          mycountries.Add("Sweden")

          mycountries.Add("France")

          mycountries.Add("Italy")

          end if

          end sub

          </script>

          在默認情況下,一個 ArrayList 對象包含 16 個條目。可通過 TrimToSize() 方法把 ArrayList 調整為最終尺寸:

          <script runat="server">

          Sub Page_Load

          if Not Page.IsPostBack then

          dim mycountries=New ArrayList

          mycountries.Add("Norway")

          mycountries.Add("Sweden")

          mycountries.Add("France")

          mycountries.Add("Italy")

          mycountries.TrimToSize()

          end if

          end sub

          </script>

          通過 Sort() 方法,ArrayList 也能夠按照字母順序或者數字順序進行排序:

          <script runat="server">

          Sub Page_Load

          if Not Page.IsPostBack then

          dim mycountries=New ArrayList

          mycountries.Add("Norway")

          mycountries.Add("Sweden")

          mycountries.Add("France")

          mycountries.Add("Italy")

          mycountries.TrimToSize()

          mycountries.Sort()

          end if

          end sub

          </script>

          要實現反向排序,請在 Sort() 方法后應用 Reverse() 方法:

          <script runat="server">

          Sub Page_Load

          if Not Page.IsPostBack then

          dim mycountries=New ArrayList

          mycountries.Add("Norway")

          mycountries.Add("Sweden")

          mycountries.Add("France")

          mycountries.Add("Italy")

          mycountries.TrimToSize()

          mycountries.Sort()

          mycountries.Reverse()

          end if

          end sub

          </script>


          綁定數據到 ArrayList

          ArrayList 對象可為下列的控件自動生成文本和值:

          • asp:RadioButtonList

          • asp:CheckBoxList

          • asp:DropDownList

          • asp:Listbox

          為了綁定數據到 RadioButtonList 控件,首先要在 .aspx 頁面中創建一個 RadioButtonList 控件(不帶任何 asp:ListItem 元素):

          <html>

          <body>

          <form runat="server">

          <asp:RadioButtonList id="rb" runat="server" />

          </form>

          </body>

          </html>

          然后添加創建列表的腳本,并且綁定列表中的值到 RadioButtonList 控件:

          實例

          <script runat="server">

          Sub Page_Load

          if Not Page.IsPostBack then

          dim mycountries=New ArrayList

          mycountries.Add("Norway")

          mycountries.Add("Sweden")

          mycountries.Add("France")

          mycountries.Add("Italy")

          mycountries.TrimToSize()

          mycountries.Sort()

          rb.DataSource=mycountries

          rb.DataBind()

          end if

          end sub

          </script>

          <html>

          <body>

          <form runat="server">

          <asp:RadioButtonList id="rb" runat="server" />

          </form>

          </body>

          </html>

          演示實例 ?

          RadioButtonList 控件的 DataSource 屬性被設置為該 ArrayList,它定義了這個 RadioButtonList 控件的數據源。RadioButtonList 控件的 DataBind() 方法把 RadioButtonList 控件與數據源綁定在一起。

          注釋:數據值作為控件的 Text 和 Value 屬性來使用。如需添加不同于 Text 的 Value,請使用 Hashtable 對象或者 SortedList 對象。

          實現一個自增的列表控件,我們可以使用Django的forms模塊中的ModelChoiceField和forms.Form類。ModelChoiceField用于生成一個下拉列表,而forms.Form則是用于創建表單的。

          步驟如下:

          1. 首先,我們需要在models.py中定義一個模型,這個模型將作為我們列表的數據源。
          2. 然后,在forms.py中,我們創建一個表單,這個表單包含一個ModelChoiceField字段,這個字段的數據源是我們之前定義的模型。
          3. 最后,在views.py中,我們創建一個視圖函數,這個函數返回一個渲染了我們剛剛創建的表單的HTML頁面。

          以下是具體的代碼實現:

          1. 在models.py中定義模型:
          from django.db import models
          
          class MyModel(models.Model):
              name=models.CharField(max_length=100)
          1. 在forms.py中創建表單:
          from django import forms
          from .models import MyModel
          
          class MyForm(forms.Form):
              my_field=forms.ModelChoiceField(queryset=MyModel.objects.all())
          1. 在views.py中創建視圖函數:
          from django.shortcuts import render
          from .forms import MyForm
          
          def my_view(request):
              form=MyForm()
              return render(request, 'my_template.html', {'form': form})
          1. 在my_template.html中渲染表單:
          <form method="post">
              {% csrf_token %}
              {{ form }}
              <button type="submit">Submit</button>
          </form>


          注意:這里的代碼只是一個基本的實現,實際使用時可能需要根據具體需求進行修改。例如,你可能需要添加錯誤處理代碼,或者在用戶提交表單后保存數據等。

          一節我們實現了分類樹的右鍵菜單彈出,本節我們繼續實現數據從瀏覽器到數據庫的工作。


          完善菜單內容

          我們先來豐富右鍵菜單的選項,在Menu控件中添加MenuItem,分別是修改節點和刪除節點:

          <Menu Style="@menuStyle">
          ???????<MenuItem OnClick="CreateNode">
          ???????????@menu_create_text
          ???????</MenuItem>
          ???????<MenuItem OnClick="ModifyNode">
          ???????????修改節點
          ???????</MenuItem>
          ???????<MenuItem OnClick="DeleteNode">
          ???????????刪除節點
          ???????</MenuItem>
          ???</Menu>

          由于修改和刪除不像創建涉及到不同的名稱,所以菜單文章內容直接寫死。事件響應代碼一并復制就好。

          void ModifyNode(MouseEventArgs args)
          {
          menuStyle="display:none;";
          }
          
          void DeleteNode(MouseEventArgs args)
          {
          menuStyle="display:none;";
          }

          運行效果:


          創建分類編輯組件

          我們的右鍵菜單現在有了事件觸發,接下來要彈出分類編輯頁面來錄入信息。我們首先需要創建一個名為CategoryEdit.Razor組件,過程跟上一節我們創建ContextMenuPanel一樣。如下圖:

          這個過程我們以后就不再講了。

          有同學私信問不使用Ant Design組件,直接用Blazor系統的組件可行嗎?我覺得這個問題比較有代表性,所以這個CategoryEdit我就不使用Ant Design的組件來完成。先上完整的代碼吧:

          <div style="width:100%; display:@display;">
          <div class="page">
          <div @onclick="toggle" id="close">X</div>
          <div style="padding: 10px;">
          <ul>
          <li class="item"><span>編碼:</span><input @bind="@Value.Id" /></li>
          ???????????????<li class="item"><span>名稱:</span><input @bind="@Value.Name" /></li>
          ???????????????<li class="item"><span>所屬Id:</span><input @bind="@Value.ParentId" /></li>
          ???????????</ul>
          ???????????<ul>
          ???????????????<li class="item">
          ???????????????????<span>是否有子類:</span>
          ???????????????????<select @bind="@has_child">
          ???????????????????????<option value="1">true</option>
          ???????????????????????<option value="0">false</option>
          ???????????????????</select>
          ???????????????</li>
          ???????????????<li class="item"><span>分類類型:</span><input @bind="@Value.Type" /></li>
          ???????????????<li class="item"><span>顯示順序:</span><input @bind="@Value.ShowOrder" /></li>
          ???????????</ul>
          ???????????<div>
          ???????????????<label>分類描述:</label>
          ???????????????????<textarea style="width:100%; min-height:200px;" @bind=@Value.Description></textarea>
          ???????????????<label>備注:</label>
          ???????????????????<textarea style="width:100%; min-height:200px;" @bind=@Value.Remark></textarea>
          ???????????</div>
          ???????????<button @onclick="save">保存</button>
          ???????</div>
          ???</div>
          </div>
          
          @code {
          ???string display="none";
          
          ???public void toggle()
          ???{
          ???????display=(display=="none") ? "block" : "none";
          ???}
          
          ???[Parameter]
          ???public EventCallback OnSave { get; set; }
          
          ???[Parameter]
          ???public Model.Category Value { get; set; }
          
          ???int has_child=0;
          ???void save()
          ???{
          ???????Value.HasChild=(has_child==0) ? false : true;
          ???????if (OnSave.HasDelegate) OnSave.InvokeAsync();
          ???}
          }

          樣式文件CategoryEdit.razor.css

          .page { width:960px; border: 1px solid #CCC; margin-left:auto; margin-right:auto; }
          .item { width: 280px; list-style:none; display: inline-block; }
          .item span { width: 100px; display: inline-block; }
          #close {
              position: relative;
              text-align: center;
              cursor: pointer;
              background: #FCC;
              float: right;
              width: 20px;
              height: 20px;
          }
              #close:hover {
                  background-color: #F00;
              }

          上部分為html元素標簽,具體標簽和布局就不展開講了。

          @display是引用下面code中的變量,只要display的值變化,這里就會隨之生效;

          @onclick是綁定click事件;用到了兩處,一個是右上角的關閉按鈕,一個是下方的保存按鈕;

          @bind="@Value.Id跟上面的@display類似,只是這個用于控件,控件的值與變量值雙向綁定;

          public void toggle()是切換是否顯示的方法,默認隱藏,調用一次就切換一次;

          [Parameter]是定義CategoryEdit組件的屬性;

          public EventCallback OnSave是聲明一個OnSave的函數作為回調;

          public Model.Category Value是要編輯或新建的Category數據實體;

          int has_child是對應Model.Category中的HasChild,在標準select及option中無法直接綁定bool類型的熟知,所以用has_child來作為媒介;

          void save()則是保存函數,做數據處理后回調OnSave;

          css文件在blazor中是隔離的,即聲明一個跟razor組件同名的css文件,它就會從屬于這個razor組件,只對這個razor生效,這樣可以很好的解決不同css文件命名相互沖突的問題。

          上面完全都是靠代碼堆的,這里有點沒想明白為什么微軟不延續winform、webform的所見即所得的方式,哪怕是有個設計視圖瀏覽也好。難道是技術上過于復雜嗎?目前以Blazor這種開發方式,想要看到修改效果,哪怕是只調一個顏色,都只能重新編譯運行才能看到效果,非常影響開發效率。以前webform的那種,改前端根本需要編譯,重新刷新頁面就好。希望這里未來能有改進。


          調用分類編輯組件

          CategoryEdit組件設計完成后,我們就可以在Index.razor中使用它了

          <CategoryEdit @ref="categoryEditor" Value="@curCategory" OnSave="@SaveCategory"></CategoryEdit>
          @code {
          CategoryEdit categoryEditor;
          Model.Category curCategory=new Model.Category();
          void SaveCategory()
          {
          }
          }


          我們只需要這幾行代碼就夠了。對屬性賦值,響應事件。然后我們先來看下效果:

          我們可以看到,調用完成后,在Index.razor中的SaveCategory函數中,curCategory中的值就都有了。實際上我們用的控件庫,比如Ant Design也都是這樣一步一步來完成的,只要有時間、有耐心,啥都不是事。


          到目前為止,我們已經完成了前端的數據準備,接下來我們就是要通過WebAPI正式向服務器提交信息了。在一般的公司中,前端和后端都是分開不同團隊來做的,后端做完提供接口,前端按照接口規范進行調用。那我們接下來的事情就是要做后端的工作了,考慮到同樣編碼內容較多,這節暫時到這里,我們下節繼續。

          ----------------------------------------------------

          本教程項目源碼已作為開源項目加入到Gitee,代碼內容會隨教程實時更新,大家有興趣的話可以關注我,以獲得最及時的更新。私信:

          私人日記 可以獲取相關鏈接;

          大家閱讀過程中有哪些看不懂或未盡興的地方,可以在評論區留言,我會先記下來在后續的教程中找機會再說。

          教程有幫助的話請大家幫忙關注、轉發、擴散,能不能開專欄還需要你們的支持!


          主站蜘蛛池模板: 国产一区二区三区日韩精品| 中文字幕日韩欧美一区二区三区 | 国产AV国片精品一区二区| 国产一区二区三区高清视频| 国产精品亚洲综合一区在线观看 | 国产激情一区二区三区成人91| 无码人妻精品一区二区| 国产精品一区二区三区99 | 亚洲美女一区二区三区| 中文无码AV一区二区三区| 视频精品一区二区三区| 天堂va视频一区二区| 日韩成人无码一区二区三区| 亚洲视频一区二区三区四区| 亚洲一区二区影院| 乱码精品一区二区三区| 色狠狠AV一区二区三区| 中文字幕在线一区二区在线| 无码一区二区三区| 日本内射精品一区二区视频| 高清国产AV一区二区三区| 国产精品视频第一区二区三区 | 视频在线观看一区二区三区| 国产一区二区三区美女| 一区二区三区免费视频网站| 一区二区三区91| 精品国产AⅤ一区二区三区4区| 变态调教一区二区三区| 国产伦精品一区二区免费| 无人码一区二区三区视频| 国产一区二区中文字幕| 人妻AV中文字幕一区二区三区| 精品视频在线观看一区二区三区| 2020天堂中文字幕一区在线观| 国产精品亚洲不卡一区二区三区| 人妻夜夜爽天天爽一区| 亚洲AV无码一区二区三区性色| 日韩一区二区在线观看| 久久久无码一区二区三区| 无码日韩AV一区二区三区| 国产91大片精品一区在线观看 |