如何在asp.net mvc3中搜索

时间:2013-07-19 11:44:03

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我使用mvc3,我有空搜索表单,只使用带搜索按钮的文本框,如果用户搜索数据并单击搜索按钮,则必须显示从索引视图中获取的结果。 这是我的控制器动作

     public ActionResult Search(string searchString)
    {
        var certificate = from s in db.certificate_mst
                       select s;
        if (!String.IsNullOrEmpty(searchString))
        {
            certificate = certificate.Where(s => s.CertificateNo.Contains(searchString));

        }
        return View(certificate);
    }

我的观看代码是

   @using (Html.BeginForm("Search","certificate1",FormMethod.Get))
{
<p><b>CertificateNo</b>:@Html.TextBox("searchString")
<input type="submit" value="search" />

通过使用此代码,搜索正在运行但是我在搜索之前获取了我在视图中的所有数据,我需要在单击搜索按钮之前使用空表单,并且只有在我单击搜索之后才需要显示结果。

2 个答案:

答案 0 :(得分:3)

在检索证书之前,只需检查空字符串

public ActionResult Search(string searchString)
{
    if (String.IsNullOrEmpty(searchString))
    {
         //Return empty viewModel
         return View();
    }

    var certificate = db.certificate_mst.Where(s => s.CertificateNo.Contains(searchString));
    return View(certificate);
}

还查看我在IQueryable的搜索扩展方法上写的博客文章应该对你有所帮助

http://www.ninjanye.co.uk/2013/03/c-generic-search-extension-method-for.html

http://jnye.co/Posts/6/c%23-generic-search-extension-method-for-iqueryable

使用扩展方法,您的代码变为......

var certificate = db.certificate_mst.Search(s => s.CertificateNo, searchString));

首选方法是将视图拆分为get和post操作,如下所示。这允许您在发布空字符串时返回所有结果:

public ActionResult Search()
{
    return View();
}

[HttpPost]
public ActionResult Search(string searchString)
{
    var certificate = db.certificate_mst.Where(s => s.CertificateNo.Contains(searchString));
    //OR
    //var certificate = db.certificate_mst.Search(s => s.CertificateNo, searchString));
    return View(certificate);        
}

答案 1 :(得分:1)

尝试在搜索屏幕中使用视图模型,以备日后在搜索中添加更多过滤项目时使用。然后,您将没有每个搜索过滤器的参数,只有一个参数,即您的视图模型。你现在拥有它的方式现在也有效,下面只是一种替代方法。

视图模型可能如下所示:

public class SearchViewModel
{
     public string SearchString { get; set; }

     // Other filter items if you need anything else
}

您的控制器的操作方法

public ActionResult Search()
{
     SearchViewModel viewModel = new SearchViewModel();

     return View(viewModel);
}

从控制器中删除您的数据访问权限并通过服务层或存储库工作:

[HttpPost]
public ActionResult Search(SearchViewModel viewModel)
{
     // Check for null viewModel

     if (!ModelState.IsValid)
     {
          // A possible failed validation is when no search string was entered,
          // and then you don't want to do any database calls.
          // Just pass back the view model and let the view handle the displaying of errors

          return View(viewModel);
     }

     // If validation succeeds now you can use your search string to retrieve data
     searchService.Search(viewModel.SearchString);

     // Do what else you need to do and the return the correct view

     return View();
}

您的搜索视图可能如下所示:

@model YourProject.ViewModels.Searches.SearchViewModel

@using (Html.BeginForm())
{
     @Html.TextBoxFor(x => x.SearchString)
     @Html.ValidationMessageFor(x => x.SearchString)

     <button id="searchButton" type="submit">Search</button>
}

我希望现在更有意义。