【问题标题】:Get string value from a control like dropdown list into a controller action. MVC Core 1.x从下拉列表等控件中获取字符串值到控制器操作中。 MVC 核心 1.x
【发布时间】:2017-05-13 02:11:08
【问题描述】:

我有一个 ASP.NET 项目。 MVC Core 带有一系列表格。每个都有一个名为“年”的字段。在 _Layout 中,我有一个包含未来 5 年(2017 年、2018 年等)的下拉列表。我想在控制器的每个操作中接收下拉选择的值,以便将过滤器“按年份”应用于查询。

_LAYOUT.CSHTML 页面

 <select name="EF_DROP" id="EF_DROP" class="btn btn-default" style="width:105px;" aria-haspopup="true" aria-expanded="true" type="button">
                                <option value="0">EF 2017</option>
                                <option value="1">EF 2018</option>
                                <option value="2">EF 2019</option>
                                <option value="3">EF 2020</option>
                            </select>
//this is my Jquery to set Hidden Fields
 $(function () {
             $("#EF_DROP").on("change", function () {
                 $("#YEAR").val($(this).find(":selected").text().substr(3, 4));
             });
         });

         $(function () {
             $("#YEAR").val($("#EF_DROP").find(":selected").text().substr(3, 4));
         });

每个查看页面

 <input type="hidden" asp-for="YEAR" />

问题出在控制器上:

 public async Task<IActionResult> Index()
        {

            var applicationDbContext = _context.MYTABLE.Include(a => a.RELATE)
              .Where(x=>x.Year == **??**);
            return View(await applicationDbContext.ToListAsync());
        }

我尝试添加一个 Singleton,但无法从集合或 Request.Form["name"]...中找到 getValue。 有人可以帮助我吗?提前致谢。

【问题讨论】:

  • 为什么不直接使用年份本身作为值呢?喜欢&lt;option value="2017"&gt;EF 2017&lt;/option&gt;
  • 在这种模式下我可以简化什么?对不起初学者的问题!但我不是专家。
  • 这样你甚至不需要使用隐藏字段YEAR。只需将EF_DROP 重命名为YEAR。您也不需要任何 jQuery 代码。
  • 使用继承,你需要在你的类层次结构的高层中使用 year 属性,以便它在低层类中获得更多的可见性。创建一个“BaseController”(从 MVC Controller 类继承)类并将“Year”添加为该 BaseController 中的公共属性。从基本控制器继承您的 MVC 控制器。属性“Year”将在 BaseController 继承的所有控制器中可用。 Razor 视图中也可以访问“年份”。
  • 谢谢!!我现在就试试!

标签: c# jquery asp.net asp.net-mvc .net-core


【解决方案1】:

我用以下方法解决了:

_LAYOUT.CSHTML 用 jQuery

     $(function () {
             var value = localStorage.getItem("POS");

             if (value != null)
             {
                $("#EF_DROP").val(value).change();
             }
             else
             {
                 $("#EF_DROP").val(0).change();
             }
             $("#Year").val($("#EF_DROP").find(":selected").text().substr(3, 4));

                 $("#EF_DROP").on("change", function () {
                     $("#Year").val($(this).find(":selected").text().substr(3, 4)); //Hidden Field
                     var url = "/Home/SetEF";
                     $.post(url, { item: $(this).find(":selected").text().substr(3, 4) }, function (response) {
                         localStorage.setItem("POS", response);
                     });
                 });
         });

    </script>

控制器

 [HttpPost]
        public int SetEF(string item)
        {
            int pos;
            switch (item)
            {
                case "2017":
                    pos = 0;
                    TempData["EF"] = 2017;
                    return pos;

                case "2018":
                    pos = 1;
                    TempData["EF"] = 2018;
                    return pos;

                case "2019":
                    pos = 2;
                    TempData["EF"] = 2019;
                    return pos;

                case "2020":
                    pos = 3;
                    TempData["EF"] = 2020;
                    return pos;

                default:
                    return 0;
            }
 }

我使用 TempData 将数据检索到另一个控制器中,因此我可以应用过滤器....无论如何我认为这并不优雅,但我 不知道怎么用新方法。

【讨论】:

  • 终于,我解决了!感谢 Dhanuka777 和 Anderson Pimentel。我混合了各种信息。
【解决方案2】:

使用继承,您需要在类层次结构中的较高级别中使用 year 属性,以便它在较低级别的类中获得更多可见性。

创建一个“BaseController”(从 MVC Controller 类继承)类并将“Year”添加为该 BaseController 中的公共属性。从基本控制器继承您的 MVC 控制器。属性“Year”将在 BaseController 继承的所有控制器中可用。 Razor 视图中也可以访问“年份”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多