2013-07-19 56 views
1

iam使用mvc3,我有空搜索表单,只使用带搜索按钮的文本框,如果用户搜索数据并点击搜索按钮,那么它必须显示结果是取自索引视图。 这里是我的控制器操作如何在asp.net中进行搜索mvc3

和我的视图代码是

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

通过使用此代码,搜索工作,但我得到所有这些我在我的视图中的数据搜索之前,我需要在点击搜索按钮之前有空表单,只有在点击搜索后才能显示结果。

回答

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);   
} 
+0

感谢您宝贵的回复,这对我非常有帮助。我需要另一个帮助,我有一列需要根据某些标准自动生成id值,但不能识别,您能帮我采用哪种方法带示例代码 – shan

+0

Hi @ sanjay1234,您的搜索请求对我来说有点太模糊,因此无法给您一个有意义的答案。我建议你尽可能详细地创建一个新的问题,我会留意的。如果您认为它已回答您的问题,请接受此答案 – NinjaNye

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> 
} 

我希望现在更有意义。