我在MVC中使用了一个有效的搜索引擎。
/View/Content/Index.cshtml
@model IEnumerable<Example.Models.Content>
@using (Html.BeginForm("Index", "Content", FormMethod.Get))
{
@Html.TextBox("keyword0")
}
@foreach (var item in Model)
{
@Html.DisplayFor(item.article_title)
}
/Controllers/ContentController.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Example.Models;
namespace Example.Controllers
{
public class ContentController : Controller
{
public ActionResult Index(string keyword0)
{
return View(db.Content.Where(x => x.article_title.Contains(keyword0)).ToList());
}
}
}
搜索返回SQL中与您使用的关键字匹配的article_title列的结果。如果我在搜索中键入 foo ,则会返回SQL中article_title包含foo的任何记录。
我正在尝试使用全文功能增强搜索引擎。我已将SQL中的article_title列转换为全文索引。在SQL Server Management Studio中,全文搜索按预期工作,仅显示包含关键字foo和bar的记录。
select * from table_name where contains (article_title, 'foo and bar')
在我的MVC应用程序中,如果我在搜索中输入 foo bar ,则不会显示任何记录。因为URL以search = foo + bar结尾,所以不显示任何记录,因为在SQL中没有记录,其中article_title包含 foo + bar 。我已将/Controllers/ContentController.cs更新为使用keyword0和keyword1进行搜索。
return View(db.Content.Where(x => x.article_title.Contains(keyword0) && x.article_title.Contains(keyword1)).ToList());
如果我手动将网址调整为www.example.com/?keyword0=foo&keyword1=bar,则搜索会正常运行,并且只显示包含foo和bar的记录。
我遇到的挑战是将foo和bar从View中的@HTML.TextFor传递给Controller中的 public ActionResult Index(),然后拆分foo和bar,以便keyword0包含foo和keyword1包含bar。
我想出的想法是将@ Html.TextBox中输入的文本从视图传递到名为搜索的变量中的Controller。然后,Controller将通过将字符串搜索添加到公共ActionResult来检索此文本。
public ActionResult Index(string search)
{
return View(db.Content.Where(x => x.article_title.Contains(keyword0) && x.article_title.Contains(keyword1)).ToList());
}
如果我现在发布应用程序,则没有错误。但是,字符串搜索变量中的文本未传递给keyword0或keyword1。我的下一个想法是在字符串搜索变量中拆分文本,然后创建变量keyword0和keyword1。
public ActionResult Index(string search)
{
string[] keywords = search.Split(' ');
string keyword0 = keywords[0];
string keyword1 = keywords[1];
return View(db.Content.Where(x => x.article_title.Contains(keyword0) && x.article_title.Contains(keyword1)).ToList());
}
当我添加代码以将搜索变量拆分为我的Controller时,Web浏览器会产生错误处理您的请求时出错。我不确定如何拆分搜索变量然后创建变量keyword0和keyword1而不产生处理请求时出错。