C# 将类似控件的下拉列表中的字符串值获取到控制器操作中。MVC核心1.x
我有一个ASP.NET项目。MVC核心带有一系列表。每个字段都有一个名为“年”的字段。在_布局中,我列出了未来5年(2017年、2018年等)的下拉列表。我希望在控制器的每个操作中接收下拉选择的值,以便将过滤器“按年”应用于查询 _LAYOUT.CSHTML页面C# 将类似控件的下拉列表中的字符串值获取到控制器操作中。MVC核心1.x,c#,jquery,asp.net,asp.net-mvc,.net-core,C#,Jquery,Asp.net,Asp.net Mvc,.net Core,我有一个ASP.NET项目。MVC核心带有一系列表。每个字段都有一个名为“年”的字段。在_布局中,我列出了未来5年(2017年、2018年等)的下拉列表。我希望在控制器的每个操作中接收下拉选择的值,以便将过滤器“按年”应用于查询 _LAYOUT.CSHTML页面 2017英孚 2018英孚 2019英孚 EF 2020 //这是我用来设置隐藏字段的Jquery $(函数(){ $(“#EF_DROP”)。关于(“更改”,函数(){ $(“#YEAR”).val($(this.find(“:se
2017英孚
2018英孚
2019英孚
EF 2020
//这是我用来设置隐藏字段的Jquery
$(函数(){
$(“#EF_DROP”)。关于(“更改”,函数(){
$(“#YEAR”).val($(this.find(“:selected”).text().substr(3,4));
});
});
$(函数(){
$(“#YEAR”).val($(“#EF_DROP”).find(“:selected”).text().substr(3,4));
});
每个查看页面
问题出在控制器上:
公共异步任务索引()
{
var applicationDbContext=\u context.MYTABLE.Include(a=>a.RELATE)
其中(x=>x.Year==**??**);
返回视图(等待applicationDbContext.toListSync());
}
我试图添加一个单例,但无法从集合或with Request中找到getValue。。。。
有人能帮我吗?提前感谢。我已经用以下方法解决了: \u LAYOUT.CSHTML 使用JQuery 我使用TempData将数据检索到另一个控制器中,因此我可以应用过滤器。。。。不管怎么说,我觉得这并不优雅,但我 不知道如何以新的方式进行。
使用继承,您需要类层次结构中较高级别的year属性,以便在较低级别的类中获得更高的可见性
创建一个“BaseController”(从MVC控制器类继承)类,并在该BaseController中添加“Year”作为公共属性。从基本控制器继承MVC控制器。在BaseController继承的所有控制器中,Porperty“Year”将可用。“年”也可以在Razor视图中访问。为什么不使用年本身作为值?像
EF2017
在这种模式下我可以简化什么?对不起,这是个初学者的问题!!但我不是专家。这样你甚至不需要使用隐藏字段YEAR
。只需将EF\u DROP
重命名为YEAR
。您也不需要任何jQuery代码。使用继承,您需要在类层次结构的高层中使用year属性,以便它在较低级别的类中更具可见性。创建一个“BaseController”(从MVC控制器类继承)类,并在该BaseController中添加“Year”作为公共属性。从基本控制器继承MVC控制器。在BaseController继承的所有控制器中,Porperty“Year”将可用。“年”也可以在您的Razor视图中访问。谢谢!!我现在就试试!终于,我解决了!感谢达努卡777和安德森·皮门特尔。我把各种信息混在一起了。
<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());
}
$(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;
}
}