C# sql查询中输入标记的ASP.NET MVC值

C# sql查询中输入标记的ASP.NET MVC值,c#,sql,asp.net-mvc,C#,Sql,Asp.net Mvc,我想使用一个输入标记来过滤我的表,比如:“SELECT*FROM tblaccount WHERE accountNo='document.getElementById('txtSearch').value'” 这是我的账户VIEWMODEL namespace MyProject.Models { public class AccountsViewModel { public DataTable Accounts { get; set; } } } 选择model.cs namesp

我想使用一个输入标记来过滤我的表,比如:“SELECT*FROM tblaccount WHERE accountNo='document.getElementById('txtSearch').value'”

这是我的账户VIEWMODEL

namespace MyProject.Models
{
public class AccountsViewModel
{
    public DataTable Accounts { get; set; }
}
}
选择model.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;
    }
}
}
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;
        }
    }
}
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>
@model MyProject.Models.AccountsViewModel
搜索:
搜寻
身份证件
交易日期
@foreach(Model.Accounts.Rows中的System.Data.DataRow dr)
{
@dr[“Id”].ToString()
@dr[“accountNo”].ToString()
@dr[“dateTrans”].ToString()
}

我们主要有两种方法来获得此输出

方式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>
选择型号。cs:

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

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

方式2:使用jquery

因为有很多好文章,我不想重复了。这里是这些文章的链接

希望以上信息会有用

谢谢


Karthik

您需要在
SelectModel
类中创建一个新属性。然后使用它,根据需要过滤数据

选择model.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;
    }
}
}
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" />


这应该可以帮助您解决问题。

在方法1中,您可以在这里给我一个示例代码:public ActionResult Index(string txtSearchterm)//当您单击此处的提交按钮时,您将得到值{//您可以使用该值执行任何操作}我没有使用实体框架,这是否仍然有效?是的,它不是必需的实体框架,您只需将该参数传递给所需的任意方法,并用该参数替换select查询。ex:sqlQuery=“”从tblaccount中选择*,其中accountNo=”“+txtSearchterm+”“按accountNo ASC排序”"; 希望对您有所帮助,谢谢。但是我的sql查询在SelecModel.cs中,而不是在HomeController.cs中,我将如何做到这一点?请给我一个示例代码,非常感谢。好的,我已经根据您的要求更新了答案,请看一下。希望这次你一定能得到解决方案..谢谢..更新:忘记在视图索引上添加按钮。chtmlI在var sqlQuery上遇到一个错误;它说“隐式类型的变量必须初始化”