使用MVC构建ASP.NET,尝试从下拉列表创建筛选器

使用MVC构建ASP.NET,尝试从下拉列表创建筛选器,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,第一个帖子在这里,所以请温柔:) 我正在创建一个带有MVC web应用程序的ASP.NET,它显示同一类(笔记本电脑)的项目列表 我想在每个标题下的主视图中创建一个下拉列表,允许我在更改后过滤结果-因此选择为空,但用户可以单击并选择下拉列表中的值,主视图项目列表将根据选择立即更新 下面是列表的外观: 我想实现一个下拉列表,但我似乎无法从下拉列表中获取所选的值:(DropDownlist已正确填充,并且正在工作) 但我不想要JavaScript,因为这都是ASP.NET 要明确的是,我有5个不同

第一个帖子在这里,所以请温柔:)

我正在创建一个带有MVC web应用程序的ASP.NET,它显示同一类(笔记本电脑)的项目列表 我想在每个标题下的主视图中创建一个下拉列表,允许我在更改后过滤结果-因此选择为空,但用户可以单击并选择下拉列表中的值,主视图项目列表将根据选择立即更新

下面是列表的外观:

我想实现一个下拉列表,但我似乎无法从下拉列表中获取所选的值:(DropDownlist已正确填充,并且正在工作)

但我不想要JavaScript,因为这都是ASP.NET


要明确的是,我有5个不同的下拉列表可供筛选,它们可以选择也可以不选择。

您混淆了客户端代码和服务器端代码。下面的示例仅使用MVC和完整的客户机-服务器体系结构。每个请求都需要往返到服务器

在这个场景中有3个组件

ProductsViewModel.cs

public class ProductsViewModel
{
    public IList<Laptop> Laptops { get; set; }

    public PurposeEnum Purpose { get; set; }
}
Products\Index.cshtml

@model MyNameSpace.ViewModel

using (BeginForm())
{
    @Html.DropDownList(Html.GetEnumSelectList<PurposeEnum>())

    foreach (var l in Model.AvailableLaptops)
    {
        // Loop through Model.AvailableLaptops and generate table
    }

    <input type="submit" value="Search" />
}
@model MyNameSpace.ViewModel
使用(BeginForm())
{
@Html.DropDownList(Html.GetEnumSelectList())
foreach(Model.AvailableLaptops中的var l)
{
//循环浏览Model.AvailableLaptops并生成表
}
}
当您第一次访问URL/Products/Index时,将触发GET操作处理程序。它将生成一个未筛选的产品列表以及筛选所需的下拉列表

当您做出选择并提交表单时,将触发操作后处理程序,并使用视图模型的Purpose和Maker属性中选定的值来过滤记录。生成了相同的视图,但带有已筛选的产品列表


这是忽略验证、错误处理和安全性的非常基本的代码。

您混淆了客户端代码和服务器端代码。下面的示例仅使用MVC和完整的客户机-服务器体系结构。每个请求都需要往返到服务器

在这个场景中有3个组件

ProductsViewModel.cs

public class ProductsViewModel
{
    public IList<Laptop> Laptops { get; set; }

    public PurposeEnum Purpose { get; set; }
}
Products\Index.cshtml

@model MyNameSpace.ViewModel

using (BeginForm())
{
    @Html.DropDownList(Html.GetEnumSelectList<PurposeEnum>())

    foreach (var l in Model.AvailableLaptops)
    {
        // Loop through Model.AvailableLaptops and generate table
    }

    <input type="submit" value="Search" />
}
@model MyNameSpace.ViewModel
使用(BeginForm())
{
@Html.DropDownList(Html.GetEnumSelectList())
foreach(Model.AvailableLaptops中的var l)
{
//循环浏览Model.AvailableLaptops并生成表
}
}
当您第一次访问URL/Products/Index时,将触发GET操作处理程序。它将生成一个未筛选的产品列表以及筛选所需的下拉列表

当您做出选择并提交表单时,将触发操作后处理程序,并使用视图模型的Purpose和Maker属性中选定的值来过滤记录。生成了相同的视图,但带有已筛选的产品列表


这是忽略验证、错误处理和安全性的非常基本的代码。

是否要在应用程序中实现级联下拉?如果我明白了什么,请纠正我。如果我在同一张图片上,你应该试试。如果你在那里遇到任何其他问题,请告诉我。谢谢你的回答。我不是在尝试创建下拉列表-已经完成了。我正在尝试从下拉列表中选择值。没有ajax我能做到这一点吗?编辑:您发送的链接可能会解决此问题。我会尽力让你知道的。谢谢
onchange=“@{Model=Model.Where(m=>m.Purpose==/*此处应为所选的值*/)”>
…不清楚您认为在此处要做什么
onchange
是一个客户端事件。因此,您应该在其中调用javascript函数,例如
onchange=“someFunction()”
。然后在
someFunction()
中,您可以使用Javascript在下拉列表中获取当前选定的值。但是如果您想在服务器端使用该信息,您需要通过AJAX发送该值,或者忘记Javascript并等待表单提交,然后服务器就会收到它。您想在应用程序中实现级联下拉吗?如果我明白了什么,请纠正我。如果我在同一张图片上,你应该试试。如果你在那里遇到任何其他问题,请告诉我。谢谢你的回答。我不是在尝试创建下拉列表-已经完成了。我正在尝试从下拉列表中选择值。没有ajax我能做到这一点吗?编辑:您发送的链接可能会解决此问题。我会尽力让你知道的。谢谢
onchange=“@{Model=Model.Where(m=>m.Purpose==/*此处应为所选的值*/)”>
…不清楚您认为在此处要做什么
onchange
是一个客户端事件。因此,您应该在其中调用javascript函数,例如
onchange=“someFunction()”
。然后在
someFunction()
中,您可以使用Javascript在下拉列表中获取当前选定的值。但是,如果您想在服务器端使用该信息,您需要通过AJAX发送该值,或者忘记Javascript,只需等待表单提交,服务器就会收到它。非常感谢!我确实混淆了两者,但我是一名学生,所以。。。这确实解决了我的问题。我试图避免有很多可能性。我有不止一个过滤器,所以编写一个复杂的开关(类似二进制)对于ASP的功能来说似乎太多了,但我认为我应该采用简单的方法:)再次感谢,它澄清了我需要的一切。非常感谢!我确实混淆了两者,但我是一名学生,所以。。。这确实解决了我的问题。我试图避免有很多可能性。我有不止一个过滤器,因此编写复杂的开关(类似二进制)对于ASP的功能来说似乎太多代码了,但我认为我应该采用简单的方法:)再次感谢你,它澄清了我需要的一切。
@model MyNameSpace.ViewModel

using (BeginForm())
{
    @Html.DropDownList(Html.GetEnumSelectList<PurposeEnum>())

    foreach (var l in Model.AvailableLaptops)
    {
        // Loop through Model.AvailableLaptops and generate table
    }

    <input type="submit" value="Search" />
}