2015-10-05 63 views
2

的页面,我有以下两个表:添加过滤器,以基于文本框的值

Table1 
___________ 
ID 
Name 
Company 
Industry 
Rank 
Key - guid 

Table2 
_____________ 
Key - guid 
FieldValue 
StartDate 
EndDate 

我使用MVC模式,而不是常规的网络形式。我为每个和单独的DBContext类创建了2个独立的模型类。

最初当页面加载时,我在页面上显示来自Table1的所有数据。我想在页面的顶部添加一个文本框,当用户输入一个值,点击进入,我想在页面上的表中的数据进行过滤基于用户输入的值:

SELECT ID, Name, Company,Industry, Rank 
FROM Table1 INNER JOIN Table2 ON Table1.Key=Table2.Key 
WHERE FieldValue=TextBox1.Text 

我已经有代码在页面上显示来自Table1的数据,但我需要帮助添加基于文本框的值的过滤器。任何人都可以将我指向正确的方向吗?

这里是认为我的代码:

<input type="text" id="TextBox1" /> 

<h2>Records</h2> 
<table style="border: 1px solid black;"> 
     <tr> 
      <th>ID</th> 
      <th>Name</th> 
      <th>Company</th> 
      <th>Industry</th> 
      <th>Rank</th> 
     </tr> 
@foreach (ProjectName.Models.Records item in Model) 
     { 
      <tr style="border: 1px solid black;"> 
       <td>@item.ID</td> 
       <td>@item.Name</td> 
       <td>@item.Company</td> 
       <td>@item.Industry</td> 
       <td>@item.Rank</td> 

      </tr> 
     } 
</table> 

这里更新视图代码:

<div>  
    @using (Html.BeginForm()) 
    { 
    <input type="text" id="TextBox1" /> 
    <input type="submit" name="submit" /> 
    } 

    <h2>Records</h2> 
    <table style="border: 1px solid black;"> 
    <tr> 
     <th>ID</th> 
     <th>Name</th> 
     <th>Company</th> 
     <th>Industry</th> 
     <th>Rank</th> 
    </tr> 
    @foreach (ProjectName.Models.Records item in Model) 
    { 
     <tr style="border: 1px solid black;"> 
      <td>@item.ID</td> 
      <td>@item.Name</td> 
      <td>@item.Company</td> 
      <td>@item.Industry</td> 
      <td>@item.Rank</td> 

     </tr> 
    } 
    </table> 
</div> 

附:亲爱的编辑们,请请美观,停止编辑MVC的标题 - 否则人们认为它是Web窗体模式,而不是MVC。所以请尽量不要编辑它,你没有帮助,只会让事情变得困难。非常感谢您的提前,我的赞赏是超越

+1

互联网上必须有一百万个教程,但基本上,你需要一个包含你的输入和按钮的'

'。将表单传递给控制器​​方法(可以与显示表单的方法相同),并且在查询中使用filter参数重新填充ViewModel,将其传递给View并重新显示页面。 – markpsmith

+0

我正在使用MVC,而不是Web窗体。有些天才只是在我的帖子标题中编辑了“MVC”,所以每个人都感到困惑 – ElenaDBA

+0

我们知道你使用MVC是因为你已经标记了它。不要在标题 –

回答

1

即使您使用的是MVC,您仍然需要<form>将过滤器值提交给控制器方法。

这是一个MVC表单中的文本框:

@using (Html.BeginForm()) 
{ 
    <input type="text" name="TextBox1" /> 
    <input type="submit" name="submit" /> 
} 

这被渲染为HTML <form>标签。你的控制器看起来是这样的:

public ActionResult Index(string TextBox1) 
{ 
    // You don't say how you're interacting with the database, 
    // but you need to check the `TextBox1` parameter for null, 
    // and use it in your query if it's not - simplified: 
    if(TextBox1 != null) 
    { 
     // do qry with parameter 
    } 
    else 
    { 
     // do qry without parameter 
    } 
    ... 

有几种方法做什么我上面写的,但是这是一个简单的版本,不需要修改您的ViewModel(主要是因为我不知道这是什么好像!)

+0

我试过了,TextBox1在索引操作中总是出现空值 – ElenaDBA

+0

发布视图你现在拥有的代码。 – markpsmith

+0

我将更新后的代码添加到了主帖子中 – ElenaDBA

0

您可以使用datatables plugin,你有静态或服务器表的过滤器。

的非常简单的例子:

$(document).ready(function() { 
    $('#example').DataTable(); 
}); 
0

首先,创建一个回传的东西,像一个<as:button>并在代码正确链接事件背后,则:

using(context db = new context()) 
{ 
    List<Table2> var1 = db.Table2.ToList() 
    List<Table2> var2 = new List<Table2>() 
    foreach(Table2 t in var1) 
    { 
     if(t.FieldValue == textbox.Text) 
     { 
      var2.Add(t); 
     } 
    } 
} 

然后:

foreach(Table2 t in var2) 
    { 
     //Bind your things here 
    } 

对不起,如果它不帮助你,或者如果我误解了这个问题。

+0

我在哪里可以将这段代码放在控制器中? – ElenaDBA

+0

正如我所说,首先你必须举办一个活动,你是否能够用达到代码?无论如何,以某种方式覆盖代码是非常重要的,无论如何exemat page_load() –

+0

page_load?我正在使用MVC,而不是Web表单... – ElenaDBA