C# 尝试在.net MVC中实现搜索

C# 尝试在.net MVC中实现搜索,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我很难弄明白怎么做。我已经在我的网站主页上添加了一个搜索框。该网站有各种产品,你可以购买分为类别。当您单击其中一个类别(例如蜡烛和香味)时,它会将您带到/家/产品/蜡烛香味。现在我已经在我的控制器和模型中创建了新方法,可以正确地进行搜索。我的搜索功能基本上是复制我的“产品类别”功能,只修改了sql查询。因此,我希望站点再次转到产品页面,就像针对特定类别:/Home/products/“search”。我不确定是否应该将搜索框包装成一个表单,或者是否有更好的方法。现在我正在尝试jqueryajax

我很难弄明白怎么做。我已经在我的网站主页上添加了一个搜索框。该网站有各种产品,你可以购买分为类别。当您单击其中一个类别(例如蜡烛和香味)时,它会将您带到/家/产品/蜡烛香味。现在我已经在我的控制器和模型中创建了新方法,可以正确地进行搜索。我的搜索功能基本上是复制我的“产品类别”功能,只修改了sql查询。因此,我希望站点再次转到产品页面,就像针对特定类别:/Home/products/“search”。我不确定是否应该将搜索框包装成一个表单,或者是否有更好的方法。现在我正在尝试jqueryajax,但是当然页面没有被重定向

这是我的搜索框html:

<input type="text" class="search" placeholder="search" onfocus="this.placeholder = ''" onblur="this.placeholder = 'search'"/>
这是控制器中的_搜索功能:

public ActionResult _search(string search)
    {

        // get the model
        List<ProductModel> m = new List<ProductModel>();

        m = ProductsModel.getProductsBySearch(search);

        return View(m);
    }
public ActionResult\u搜索(字符串搜索)
{
//获取模型
列表m=新列表();
m=ProductsModel.getProductsBySearch(搜索);
返回视图(m);
}

然后,该函数只调用运行sql查询并返回相应ProductModel的列表。我已经弄清楚了后端的东西。我只是不知道如何正确地从前端调用我的搜索。

如果返回完整视图,您似乎不需要Ajax

考虑使用以下javascript在不使用表单的情况下执行重定向:

$(".search").keypress(function (event) {
    var searchString = $(this).val();
    console.log(searchString);
    console.log("blah");
    if (event.which == 13) {
        var searchUrl = '@Url.Action("_search", "Home")';
        searchUrl += "/" + searchString;
        window.location.href = searchUrl;
    } // end if
});
或者,使用表单方法

<script type="text/javascript">
$(".search").keypress(function (event) {
    var searchString = $(this).val();
    console.log(searchString);
    console.log("blah");
    if (event.which == 13) {
        $("#search-form").submit();
    } // end if
});
</script>

<form id="search-form" method="post" action="@Url.Action("_search", "Home")">
   <input type="text" class="search" name="search" placeholder="search" onfocus="this.placeholder = ''" onblur="this.placeholder = 'search'"/>
   <input type="submit" value="Go" name="submit" />
</form>

$(“.search”).keypress(函数(事件){
var searchString=$(this.val();
console.log(searchString);
控制台日志(“废话”);
if(event.which==13){
$(“#搜索表单”).submit();
}//如果结束,则结束
});

我添加的重要部分是输入的
name=“search”
属性。这将告诉默认MVC ModelBinder查找名称与控制器的操作参数匹配(源代码中缺少)的HTML输入元素。

您可以使用success函数防止页面重新加载

$(".search").keyup(function (e) {
    var searchString = $(this).val();
    if (e.which == 13) {
        $.ajax({
            type: "POST",
            url: '@Url.Action("_search", "Home")',
            data: {
                search: searchString
            },
            success: function () {
                // do something here, like replace the html
            }
        });
    }
});
一个来自约定的提示,像这样使用你的动作名称

public ActionResult Search(string search)

我尝试了表单方法。“未找到视图“_search”或其主视图,或者没有视图引擎支持搜索的位置。”@dmikester1在操作方法中,返回视图(m)。默认情况下,MVC将假定您返回的视图的名称与操作的方法名称相匹配(在具有控制器名称的文件夹中)。如果您没有名为_search的视图,这就是问题所在。如果您想让它返回不同的视图,例如您用于产品搜索结果的视图,只需让它返回:view(“ViewIWantToReturn”,m);否则您必须创建视图_search.Genius!非常感谢你!
public ActionResult Search(string search)