【问题标题】:.NET Core Razor page Dropdown not returning a value.NET Core Razor 页面下拉菜单不返回值
【发布时间】:2021-12-05 00:58:06
【问题描述】:

我对 .net core 5 和 razor 页面非常陌生,并尝试构建一个搜索表单来显示结果,但无法从两个特定下拉列表中获取值(始终返回 1 或 null,具体取决于模型定义)。这是搜索控件的 HTML:

    <form method="post">
    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-2 vh-100" style="background-color:lightgray;">
                <div class="row">
                    <div class="colvertspc">
                        <label>Begin Date</label>
                        <input type="date" class="form-control" name="begindate" id="begindate" asp-for="paramsearch.BeginDate" />
                    </div>
                </div>
                <div class="row">
                    <div class="colvertspc">
                        <label>End Date</label>
                        <input type="date" class="form-control" name="enddate" id="enddate" asp-for="paramsearch.EndDate" />
                    </div>
                </div>
                <div class="row">
                    <div class="colvertspc">
                        <label>Access Rule Group</label>
                        <div>
                            <select name="accessrulegroup" asp-items="Model.accessgrouplist" class="form-control" asp-for="paramsearch.AccessRuleGroupCode">
                               <option value="-1">Select</option>
                            </select>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="colvertspc">
                        <label>Access Rule Category</label>
                        <div>
                            <select name="accessrulecategory" asp-items="Model.accesscategorylist" class="form-control" asp-for="paramsearch.AccessRuleCategoryCode">
                                <option value="-1">Select</option>
                            </select>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="colvertspc">
                        <label>Sort Order</label>
                        <div>
                            <select name="sortorder" class="form-control" asp-for="paramsearch.SortOrder">
                                <option value="1">ASC</option>
                                <option value="2">DESC</option>
                            </select>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="colvertspc">
                        <button type="submit" class="btn btn-success">SEARCH</button>
                    </div>
                </div>

以下是 PageModel 绑定和检索值的代码:

        public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;

        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }


        //dropdowns
        public SelectList accessgrouplist { get; set; }
        public SelectList accesscategorylist { get; set; }


        //parameters from left side panel, for search
        [BindProperty]
        public SearchParametersModel paramsearch { get; set; }


        public void OnGet()
        {
            //bind search dropdowns
            this.accessgrouplist = new SelectList(PopulateAcessGroups(), "AccessRuleGroupCode", "AccessRuleGroup");
            this.accesscategorylist = new SelectList(PopulateAcessCategories(), "AccessRuleCategoryCode", "AccessRuleCategory");
        }

        public IActionResult OnPost() 
        {
            //check validators
            if (ModelState.IsValid == false) 
            {
                return Page();
            }

            //get SEARCH parameters as test
            var ww = paramsearch.BeginDate;
            var www = paramsearch.AccessRuleGroupCode;
            var ww1w = paramsearch.AccessRuleCategoryCode;
            var ww2w = paramsearch.SortOrder;


            return RedirectToPage("/Index");
        }

        //hard coded dropdown data, will be replaced by database stuff
        private static List<AccessRuleGroupModel> PopulateAcessGroups()
        {
            List<AccessRuleGroupModel> groups = new List<AccessRuleGroupModel>();
            groups.Add(new AccessRuleGroupModel { AccessRuleGroupCode = 1, AccessRuleGroup = "Group 1" });
            groups.Add(new AccessRuleGroupModel { AccessRuleGroupCode = 2, AccessRuleGroup = "Group 2" });
            groups.Add(new AccessRuleGroupModel { AccessRuleGroupCode = 3, AccessRuleGroup = "Group 3" });
            return groups;
        }

还有几个类定义:

        public class AccessRuleGroupModel
    {
        [Key]
        public int AccessRuleGroupCode { get; set; }
        public string AccessRuleGroup { get; set; }
    }
    public class SearchParametersModel
    {
        public DateTime BeginDate { get; set; }
        public DateTime EndDate { get; set; }
        public string AccessRuleCategoryCode { get; set; }
        public string AccessRuleGroupCode { get; set; }
        public string SortOrder { get; set; }
    }

真的希望有人能指出我错过了什么。

提前致谢, 吉姆·W

【问题讨论】:

标签: asp.net-core .net-core razor-pages


【解决方案1】:

Asp.Net Core 根据 name 属性绑定模型数据。使用标签助手,以便下拉列表的生成名称属性确保数据将绑定到paramsearch

<div class="row">
    <div class="colvertspc">
        <label>Access Rule Group</label>
        <div>
            <select asp-for="paramsearch.AccessRuleGroupCode" asp-items="Model.accessgrouplist" class="form-control" >
                <option value="-1">Select</option>
            </select>
        </div>
    </div>
</div>
<div class="row">
    <div class="colvertspc">
        <label>Access Rule Category</label>
        <div>
            <select  asp-for="paramsearch.AccessRuleCategoryCode" asp-items="Model.accesscategorylist" class="form-control">
                <option value="-1">Select</option>
            </select>
        </div>
    </div>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2020-06-16
    • 2020-02-22
    • 1970-01-01
    • 2020-10-01
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多