1

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" />

このコードを使用すると、検索は機能しますが、検索前にビューにあるすべてのデータを取得しています。検索ボタンをクリックする前に空のフォームが必要で、検索をクリックした後にのみ結果を表示する必要があります。

4

2 に答える 2

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);        
}
于 2013-07-19T11:49:03.493 に答える