2013-03-31 58 views
1

基于文本框的值来过滤模型这个问题可能完全没有意义,但我是MVC和Razor中的新手。如何使用Javascript(剃刀)

这里是我想要做的事:

  1. 我有一个简单的表“产品”在那里我retrrieve使用我的模型中的所有 值。产品表具有字段Id,名称,价格和开始日期 。
  2. 我传递的数据从控制器到 视图作为List
  3. 在我有一个自动完成字段(KendoUI)的视图,其中I型的产品
  4. 的 名称在事件处理程序 在AutoCoplete变化事件,我要检索的 “价格”已在自动完成文本框

下面被输入的产品为产品代码:

public class Product 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public DateTime FirstRelease { get; set; } 
    public decimal Price { get; set; } 
} 

public class WidgetsDBContext : DbContext 
{ 
    public DbSet<Product> Products { get; set; } 
} 

我的视图(部分代码)的代码如下:

<div id="auto"> 
    <p>Start typing</p> 
    <label for="productAutoComplete">Please select procuct:</label> 
    @(Html.Kendo().AutoComplete() 
     .Name("productAutoComplete") 
     .DataTextField("Name") 
     .BindTo(Model) 
     .Filter(FilterType.StartsWith) 
     .Placeholder("Select the product") 
     .HighlightFirst(true) 
     .Suggest(true) 
    ) 

    <script> 
     function productAutoComplete_change() { 
      var gauge = $("#linearGauge").data("kendoLinearGauge"); 
      @foreach (var p in Model) <==== HERE I WANT TO DO THE FILTERING 
      { 
       @: gauge.value(@p.Price); 
      }      
     } 

     $("#productAutoComplete").bind("change", productAutoComplete_change); 

    </script> 
</div> 

关心验证:如果我没有理解MVC和剃刀的基础好,那我是正确的认为的观点是呈现一次(在HTTP GET期间),因此我无法动态过滤Razor中的模型(但仅限于Javascript)?如果是的话,那么正确的做法是什么?

预先感谢您

Lefteris

+1

请看这里:http://docs.kendoui.c​​om/getting-started/using-kendo-with/aspnet-mvc/helpers/autocomplete/overview,这里http://docs.kendoui.c​​om/api/framework/datasource,如果你想使用ServerFiltering。 –

回答

0

我是正确的认为视图渲染一次(在HTTP GET期间),因此我不能够动态地过滤模型 剃刀(但仅限于Javascript)?

是的,这是正确的。

如果是,那么做什么是正确的方法?

您可以使用AJAX。例如,在productAutoComplete_change函数中,您可以向控制器操作发送AJAX请求,该操作将执行过滤并返回包含过滤结果的部分视图。

有很多关于在ASP.NET MVC中使用AJAX的教程。例如,使用jQuery,您可以使用$.ajax()函数。

+0

谢谢Darin。我希望,因为我已经在数据库中执行了一次查找(为了构建自动完成字典),我可以避免再次执行此操作(通过ajax调用) – Lefteris