C# MVC/LINQ搜索功能

C# MVC/LINQ搜索功能,c#,asp.net-mvc,linq,razor,C#,Asp.net Mvc,Linq,Razor,好的,开始吧,我是MVC、LINQ和Razor的新手。这些是我目前正在努力学习的技能 我的观点是,当您第一次访问页面时,默认情况下它会列出整个表。在这一页上,我有两个下拉框,其中充满了我想过滤结果的值 当用户选择了一个不是默认值的值,然后重新加载页面,然后按他们选择的下拉列表过滤数据时,我如何做到这一点 public ActionResult Index() { var docs = db.GetData(); return View(docs); } 这是我的下拉列表:

好的,开始吧,我是MVC、LINQ和Razor的新手。这些是我目前正在努力学习的技能

我的观点是,当您第一次访问页面时,默认情况下它会列出整个表。在这一页上,我有两个下拉框,其中充满了我想过滤结果的值

当用户选择了一个不是默认值的值,然后重新加载页面,然后按他们选择的下拉列表过滤数据时,我如何做到这一点

public ActionResult Index()
{
    var docs = db.GetData();


    return View(docs);
}
这是我的下拉列表:

@Html.DropDownList("FunctionList", "Select a Function")

每当他们选择一个不是“选择函数”的值时,我希望它重新加载页面,然后显示过滤后的数据。

您可以使用javascript并订阅下拉列表中的
更改事件,然后通过将所选值传递给服务器来重新加载当前页面。或者,您可以使用对服务器的AJAX调用来仅刷新视图的表部分。在这种情况下,您需要将表放在一个部分视图中,该视图将包含在主视图中,您将使用AJAX调用一个控制器操作,并传递当前选择的下拉列表值,该值将用于过滤结果并返回一个部分视图

例如,使用jQuery

<script type="text/javascript">
    $(function() {
        $('#FunctionList').change(function() {
            var selectedFunction = $(this).val();
            if (selectedFunction != '') {
                $.ajax({
                    url: '@Url.Action("SomeAction", "SomeController")',
                    type: 'GET',
                    cache: false,
                    data: { selectedFunction: selectedFunction }
                    success: function(result) {
                        $('#resultsContainer').html(result);
                    }
                });
            }
        });
    });
</script>
控制器操作将使用这些值过滤结果并将其传递给局部视图:

public ActionResult SomeAction(string selectedFunction, string someOtherValue) 
{
    IEnumerable<SomeResultModel> results = ...
    return PartialView(results);
}
public ActionResult SomeAction(string selectedFunction,string someOtherValue)
{
IEnumerable结果=。。。
返回部分视图(结果);
}

您可以使用javascript并订阅下拉列表中的
更改
事件,然后通过将所选值传递给服务器来重新加载当前页面。或者,您可以使用对服务器的AJAX调用来仅刷新视图的表部分。在这种情况下,您需要将表放在一个部分视图中,该视图将包含在主视图中,您将使用AJAX调用一个控制器操作,并传递当前选择的下拉列表值,该值将用于过滤结果并返回一个部分视图

例如,使用jQuery

<script type="text/javascript">
    $(function() {
        $('#FunctionList').change(function() {
            var selectedFunction = $(this).val();
            if (selectedFunction != '') {
                $.ajax({
                    url: '@Url.Action("SomeAction", "SomeController")',
                    type: 'GET',
                    cache: false,
                    data: { selectedFunction: selectedFunction }
                    success: function(result) {
                        $('#resultsContainer').html(result);
                    }
                });
            }
        });
    });
</script>
控制器操作将使用这些值过滤结果并将其传递给局部视图:

public ActionResult SomeAction(string selectedFunction, string someOtherValue) 
{
    IEnumerable<SomeResultModel> results = ...
    return PartialView(results);
}
public ActionResult SomeAction(string selectedFunction,string someOtherValue)
{
IEnumerable结果=。。。
返回部分视图(结果);
}

要做到这一点,恐怕您必须将JQuery添加到项目所需的技能列表中:)

您需要使用JQuery为DropDownList上的更改事件创建一个处理程序。在该事件处理程序中,将数据发布到另一个操作方法,如以下方法:

public ActionResult Filter(int id)
{
    var docs = db.GetData().Where(d => d.Id == id);

    return View("Index", docs);
}
您可以通过简单地调用Url/{YourController}/Filter/{TheValueForId}来实现这一点

当您开始使用MVC和LINQ时,这绝对不是您可以选择的最佳测试用例(如果您选择它的话)


如果您有选择的话,可以从简单的事情开始。

要做到这一点,恐怕您必须将JQuery添加到项目所需的技能列表中:)

您需要使用JQuery为DropDownList上的更改事件创建一个处理程序。在该事件处理程序中,将数据发布到另一个操作方法,如以下方法:

public ActionResult Filter(int id)
{
    var docs = db.GetData().Where(d => d.Id == id);

    return View("Index", docs);
}
您可以通过简单地调用Url/{YourController}/Filter/{TheValueForId}来实现这一点

当您开始使用MVC和LINQ时,这绝对不是您可以选择的最佳测试用例(如果您选择它的话)


如果你有选择的话,试着做一些简单的事情作为开始。

你会使用这样的东西。这是一个Telerik网格示例

$('#btnFilter).on('click', function(e){
    e.preventDefault();
    var grid = $("#grid").data("kendoGrid");
    var new_data = getData();
    grid.dataSource.data(new_data);
});

function getData() {
    var _resData;
    var name= $('#txtName').val();
    $.ajax({
        type: 'POST',
        url: '/MyContoller/Index/',
        dataType: 'json',
        data: { name: name},
        success: function (data) {
            _resData = data; 
        },
        data: {},
        async: false
    });
    return _resData;
}

在本例中,控制器是“我的控制器”,操作是“索引”

您将使用类似的内容。这是一个Telerik网格示例

$('#btnFilter).on('click', function(e){
    e.preventDefault();
    var grid = $("#grid").data("kendoGrid");
    var new_data = getData();
    grid.dataSource.data(new_data);
});

function getData() {
    var _resData;
    var name= $('#txtName').val();
    $.ajax({
        type: 'POST',
        url: '/MyContoller/Index/',
        dataType: 'json',
        data: { name: name},
        success: function (data) {
            _resData = data; 
        },
        data: {},
        async: false
    });
    return _resData;
}

在本例中,控制器是“我的控制器”,操作是通过Ajax或通过发回表单“索引”

。有关mvc网格过滤的教程,请参阅或谷歌。@SamLeach我很想通过AJAX来实现,但我从未通过.net或C#仅通过Jquery实现过AJAX。这使我害怕。我会看看你发布的链接,谢谢。通过Ajax或发回表单。有关mvc网格过滤的教程,请参阅或谷歌。@SamLeach我很想通过AJAX来实现,但我从未通过.net或C#仅通过Jquery实现过AJAX。这使我害怕。我将查看您发布的链接,谢谢。感谢您,Jquery是我能流利使用的工具!)我假设我可以将
int-id
更改为
string函数
?虽然我从未使用Jquery发布到动作事件,但我认为语法没有那么大的不同。基本上,您可以使用JQuery发布任何类型的数据,并在方法中添加等效的.NET类型作为参数。例如,如果您将json DateTime发布到MVC操作方法,只需添加一个同名的DateTime参数,.NET就会自动将接收到的DateTime解析为.NET DateTime对象。感谢您,Jquery是我能熟练使用的工具!:)我假设我可以将
int-id
更改为
string函数
?虽然我从未使用Jquery发布到动作事件,但我认为语法没有那么大的不同。基本上,您可以使用JQuery发布任何类型的数据,并在方法中添加等效的.NET类型作为参数。例如,如果将json DateTime发布到MVC操作方法,只需添加一个同名的DateTime参数,.NET就会自动将接收到的DateTime解析为.NET DateTime对象。