2017-06-16 56 views
0

我想使用输入标记过滤我的表,如:“SELECT * FROM tblaccount WHERE accountNo ='document.getElementById('txtSearch')。value “”将输入标记的ASP.NET MVC值转换为sql查询

这是我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

更新:忘了补充上查看Index.chtml – Hanzou

回答

0

我们主要有两种方式来获得这个输出

方法1:使用表单标签 - 最简单的

作为第一步,把搜索框在表单标签内部并提供文本框的名称,如下所示:

@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

方式二:使用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

希望上述信息将是有益的

感谢

KARTHIK

+0

按钮在方法1中,你能不能给我一个在这里的示例代码: 公众的ActionResult指数(字符串txtSearchterm)//当你点击这里提交按钮,您将得到值 //您可以使用该值执行任何操作 } – Hanzou

+0

我没有使用实体框架,这是否仍然有效? – Hanzou

+0

yup,它不是必需的实体框架和所有的,你只是将该参数传递给你想要的任何方法,并用该参数替换该选择查询。例如:sqlQuery =“”SELECT * FROM tblaccount WHERE accountNo ='“+ txtSearchterm +”'ORDER BY accountNo ASC“; 希望它的帮助谢谢 –

0

你需要SelectModel类的新属性。并且使用它可以根据需要过滤数据。

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

现在你需要改变的观点HTML,这样的SearchData将来自UI控制器作为模型的一部分。更改搜索文本框的html,如下所示。

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

这应该有助于您解决问题。

+0

我在var sqlQuery上遇到错误;它说“隐式类型变量必须初始化” – Hanzou

+0

@Hanzou,检查编辑。 –