【问题标题】:populate select option from another listbox using c# in razor page在剃须刀页面中使用 c# 从另一个列表框中填充选择选项
【发布时间】:2020-07-23 23:12:19
【问题描述】:

嘿, 单击按钮后,我试图用另一个 listboxA 中的选定项目填充 listboxB。 我的 HTML 代码

<div class="row" runat="server">
    <div class="m-auto">
        <form method="post">
            <label>Coalition</label>
            <select id="CoalitionList" class="form-control" name="CoalitionList" asp-for="CoalitionList">
                <option value="0" selected disabled>-- Select Coalition --</option>
                <option value="1">Coalition A</option>
                <option value="2">Coalition B</option>
            </select>
            <label>Alliances</label>
            <select id="AllianceList" class="form-control" name="AllianceList" asp-for="AllianceList" asp-items="@Model.AllianceItems" multiple="multiple" size="10">
                <option value="0" selected disabled>-- Select Alliance --</option>
            </select>
            <button name="AddButton" id="AddButton" class="btn btn-primary" type="submit" onclick="AddButton_Click">Add</button>
        </form>
    </div>
    <br />
    <div class="form-group">
        <form method="post">
            <label>Coalition A</label>
             //The selected items should display here
            <select id="CoalitionAList" name="CoalitionAList" class="form-control" size="10" asp-items="@Model.SelectedAllianceItems">
            </select>
        </form>
    </div>
</div>

我的代码在后面。如何访问值字段的 SelectedValue 和文本字段的 Displaymemberpath?

 public class GenerateChartsModel : PageModel
    {
        private readonly DContext _db;
        public GenerateChartsModel(DContext db)
        {
            _db = db;
        }
        [BindProperty]
        public int CoalitionList { get; set; }
        //To Display selected value in CoalitionAList
        public IEnumerable<SelectListItem> SelectedAllianceItems { get; set; }
        //Storing and passing selected values
        public int AllianceList { get; set; }
        //Displaying items
        public IEnumerable<SelectListItem> AllianceItems { get; set; } 
        public void OnGet()
        {
            AllianceItems = _db.Alliances.Select(a => new SelectListItem {Value = a.Alliance_Id.ToString(), Text = a.Alliance}).ToList();
        }
        protected void AddButton_Click(object sender, EventArgs e)
        {
            var SelectedCoalitionList = this.CoalitionList;
            var SelectedAllianceList = this.AllianceList;
            if(SelectedAllianceList != 0 || SelectedCoalitionList != 0)
            {
                SelectedAllianceItems = new List<SelectListItem>()
                {
                    //This doesn't work.
                    new SelectListItem{Value = SelectedAllianceList.ToString(), Text = SelectedAllianceList.ToString()}
                };
            }
        }
    }

关于一个完全不同但相似的话题。如果我尝试使用 asp:listbox 或我尝试过的任何东西,我的页面不会呈现。即使我从 docs.microsoft 复制了整个代码。这有什么原因吗?

【问题讨论】:

    标签: c# html asp.net-core


    【解决方案1】:

    尝试在 AddButton_Click 事件中设置一个调试器,可以看到这个方法没有被执行。通常,在 Asp.net core 中,handler 方法以“On”为前缀,例如:OnGet()、OnPost()、OnPut() 等。当你点击按钮时,它会将表单提交给这个 handler 方法,而不是使用按钮单击事件(像这样的 asp.net 服务器端单击事件)。有关 asp.net core 中处理程序方法的更多详细信息,您可以查看此链接:Handler Methods in Razor Pages

    所以,你可以修改如下代码:

    Index.cshtml 中的代码

    <div class="row" runat="server">
        <div class="m-auto">
            <form method="post">
                <label>Coalition</label>
                <select id="CoalitionList" class="form-control" asp-for="CoalitionList" asp-items="@Model.CoalitionItems">
                    <option value="0" selected disabled>-- Select Coalition --</option> 
                </select>
                <label>Alliances</label>
                <select id="AllianceList" class="form-control" asp-for="AllianceList" asp-items="@Model.AllianceItems" multiple="multiple" size="10">
                    <option value="0" selected disabled>-- Select Alliance --</option>
                </select>
                <button name="AddButton" id="AddButton" class="btn btn-primary" type="submit" onclick="AddButton_Click">Add</button>
            </form>
        </div>
        <br />
        <div class="form-group">
            <form method="post">
                <label>Coalition A</label>
                //The selected items should display here
                <select id="CoalitionAList" name="CoalitionAList" class="form-control" size="10" asp-items="@Model.SelectedAllianceItems">
                </select>
            </form>
        </div>
    </div>
    

    Index.cshtml.cs 中的代码
    注意:由于您使用的是列表框,我想您可能想要选择多个项目,因此,我将 AllianceList 数据类型从 int 更改为 List&lt;int&gt;。如果您不喜欢,请将其改回int

    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;
    
        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }
        [BindProperty]
        public int CoalitionList { get; set; }
        //To Display selected value in CoalitionAList
        public IEnumerable<SelectListItem> SelectedAllianceItems { get; set; }
    
        //Storing and passing selected values 
        [BindProperty]
        public List<int> AllianceList { get; set; }
        //Displaying items
        public IEnumerable<SelectListItem> AllianceItems { get; set; } 
        public IEnumerable<SelectListItem> CoalitionItems { get; set; }
    
        public IActionResult OnGet()
        {
            AllianceItems = GetAllianceItems();
            CoalitionItems = GetCoalitionItems();
    
            return Page();
        } 
    
        public List<SelectListItem> GetAllianceItems()
        {
            //test data
            return new List<SelectListItem>()
            {
                new SelectListItem(){ Value = "1001", Text ="AAA"},
                 new SelectListItem(){ Value = "1002", Text ="BBB"},
                  new SelectListItem(){ Value = "1003", Text ="CCC"},
                   new SelectListItem(){ Value = "1004", Text ="DDD"},
                    new SelectListItem(){ Value = "1005", Text ="EEE"},
            };
        }
        public List<SelectListItem> GetCoalitionItems()
        {
            return new List<SelectListItem>()
            {
                new SelectListItem(){ Value = "1", Text ="Coalition A"},
                 new SelectListItem(){ Value = "2", Text ="Coalition B"}, 
            };
        }
        public IActionResult OnPost()
        {
            var SelectedCoalitionList = this.CoalitionList;
            var SelectedAllianceList = this.AllianceList;
            if (SelectedAllianceList.Count> 0 || SelectedCoalitionList != 0)
            {
                SelectedAllianceItems = new List<SelectListItem>()
                { 
                    new SelectListItem{Value = String.Join(",", SelectedAllianceList), Text = String.Join(",", SelectedAllianceList)}
                };
            }
    
            //re-populate the ListBox A and the DropDownlist
            AllianceItems = GetAllianceItems();
            CoalitionItems = GetCoalitionItems();
    
            return Page();
        }
    }
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2021-04-05
      • 2019-07-24
      • 1970-01-01
      • 2019-07-31
      • 2020-07-14
      • 2023-04-05
      • 2020-04-20
      相关资源
      最近更新 更多