2017-06-16 5 views
0

"SELECT * FROM tblaccount WHERE accountNo = 'document.getElementById(' txtSearch ')のような入力タグを使用してテーブルをフィルタリングしたいと思います。 「」SQLクエリへの入力タグのASP.NET MVC値

は、これは私のAccountsViewModel

namespace MyProject.Models 
{ 
public class AccountsViewModel 
{ 
    public DataTable Accounts { get; set; } 
} 
} 

SelectModel.cs

namespace MyProject.Models 
{ 
public class SelectModel 
{ 
    private static SqlConnection GetCn() 
    { 
     SqlConnection cn = new SqlConnection(@"MyConnectionString"); 
     return cn; 
    } 

    public DataSet GetAccounts() 
    { 
     SqlConnection cn = GetCn(); 
     SqlCommand cmd = new SqlCommand("SELECT * FROM tblaccount ORDER BY accountNo ASC", cn); 
     DataSet ds = new DataSet(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(ds); 
     return ds; 
    } 
} 
} 

HomeController.csある

namespace MyProject.Controllers 
{ 
public class HomeController : Controller 
{ 
    public ActionResult Index(MyProject.Models.SelectModel selectmodel) 
    { 
     AccountViewModel vm = new AccountViewModel(); 
     DataSet ds = selectmodel.GetAccounts(); 
     vm.Accounts = ds.Tables[0]; 

     return View(vm); 
    } 
} 
} 

Index.chtml

@model MyProject.Models.AccountsViewModel 

<label for="txtSearch">Search: </label>   
<input type="text" class="form-control" id="txtSearch"> 
<button class="btn btn-default" type="submit" id="btnSearch">Search</button> 

<table class="table"> 
    <thead> 
     <tr> 
      <th>ID</th> 
      <th">Account Number</th> 
      <th">Transaction Date</th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (System.Data.DataRow dr in Model.Accounts.Rows) 
     { 
    <tr> 
     <td>@dr["Id"].ToString()</td> 
     <td>@dr["accountNo"].ToString()</td> 
     <td>@dr["dateTrans"].ToString()</td> 
    </tr>} 
    </tbody> 
</table> 
+0

更新: 公共のActionResultインデックス(文字列txtSearchterm)あなたはここに送信ボタンをクリックしたとき//あなたが得る:、方法1で表示Index.chtml – Hanzou

答えて

0

主に我々は

ウェイ1この出力を取得するには、2つの方法があります:formタグ使用して - 第一段階として最も簡単な

を、検索ボックスを置くをフォームタグの中に入力し、テキストボックスの名前を次のように指定します。

@model MyProject.Models.AccountsViewModel 

    @using (Html.BeginForm("Index", "Home", FormMethod.Get)) 
    {  

     <label for="txtSearch">Search: </label>   
    <input type="text" class="form-control" id="txtSearch" name="txtSearchterm"> 

    } 

    <table class="table"> 
     <thead> 
      <tr> 
       <th>ID</th> 
       <th">Account Number</th> 
       <th">Transaction Date</th> 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (System.Data.DataRow dr in Model.Accounts.Rows) 
      { 
     <tr> 
      <td>@dr["Id"].ToString()</td> 
      <td>@dr["accountNo"].ToString()</td> 
      <td>@dr["dateTrans"].ToString()</td> 
     </tr>} 
     </tbody> 
    </table> 

コントローラコード:

public ActionResult Index(MyProject.Models.SelectModel selectmodel,string txtSearchterm) //when you click submit button here you will get the value 
    { 
      AccountViewModel vm = new AccountViewModel(); 
    //updated 
    DataSet ds = selectmodel.GetAccounts(txtSearchterm); 
    vm.Accounts = ds.Tables[0]; 

    return View(vm); 

} 

を選択Model.cs:

namespace MyProject.Models 
    { 
    public class SelectModel 
    { 
     private static SqlConnection GetCn() 
     { 
      SqlConnection cn = new SqlConnection(@"MyConnectionString"); 
      return cn; 
     } 

     //updated 
     public DataSet GetAccounts(string txtSearchterm) 
     { 
      SqlConnection cn = GetCn(); 
     string sqlquery = ""; 
      if(txtsearchterm != null) 
     { 
     sqlquery ="SELECT * FROM tblaccount WHERE accountNo = 
     '"+txtSearchterm+"'ORDER BY accountNo ASC"" 
     } 
    else 
    { 
    sqlquery ="SELECT * FROM tblaccount ORDER BY accountNo ASC"" 
    } 
      SqlCommand cmd = new SqlCommand(sqlquery , cn); 
      DataSet ds = new DataSet(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(ds); 
      return ds; 
     } 
    } 
    } 

MSDN:Add a Search Box to the Students Index Page

ウェイ2:使用jqueryの

良い記事がたくさんあるので、私はもう一度繰り返したくない。これらの記事のリンクは次のとおりです。

Filtering Data in ASP.NET MVC using jQuery and Partial Views

http://www.codedigest.com/posts/24/search-or-filter-table-columns-in-client-side-using-jquery-in-aspnet-mvc

あなたはSelectModelクラスの新しいプロパティを必要とする上記の情報は有用であろう

おかげ

カルティク

+0

上のボタンを追加するためにあなたが私にここにサンプルコードを与えることができます忘れました値 { //その値を持つ任意の操作を実行できます } – Hanzou

+0

私はエンティティフレームワークを使用していませんが、これはまだ機能しますか? – Hanzou

+0

yup、その必須のエンティティフレームワークとすべて、あなたはその任意のメソッドにそのパラメータを渡し、その選択クエリをそのパラメータで置き換えます。例:sqlQuery = "" SELECT * FROM tblaccount WHERE accountNo = '"+ txtSearchterm +"' ORDER BY accountNo ASC "; ご協力ありがとうございます。 –

0

を願っています。また、必要に応じてデータをフィルタリングして使用します。

SelectModel.cs

namespace MyProject.Models 
{ 
    public class SelectModel 
    { 
     private static SqlConnection GetCn() 
     { 
      SqlConnection cn = new SqlConnection(@"MyConnectionString"); 
      return cn; 
     } 

     public string SearchText { get; set; } 

     public DataSet GetAccounts() 
     { 
      SqlConnection cn = GetCn(); 
      SqlCommand cmd; 
      if (!string.IsNullOrEmpty(this.SearchText)) 
      { 
       var sqlQuery = "SELECT * FROM tblaccount WHERE accountNo = @accountNo ORDER BY accountNo ASC"; 
       cmd = new SqlCommand(sqlQuery, cn); 
       cmd.Parameters.Add(new SqlParameter("accountNo", SqlDbType.NVarChar); 
       cmd.Parameters[0].Value = this.SearchText; 
      } 
      else 
      { 
       cmd = new SqlCommand("SELECT * FROM tblaccount ORDER BY accountNo ASC", cn); 
      } 
      DataSet ds = new DataSet(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(ds); 
      return ds; 
     } 
    } 
} 

は今、あなたはSearchDataは、モデルの一部としてUIからコントローラに来るように、ビューのHTMLを変更する必要があります。検索テキストボックスのhtmlを次のように変更します。

<input type="text" class="form-control" id="SearchText" name="SearchText" /> 

これは、問題の解決に役立ちます。

+0

var sqlQueryでエラーが発生しました。 「暗黙的に型指定された変数を初期化する必要があります。」 – Hanzou

+0

@Hanzou、編集を確認してください。 –

関連する問題