1

我是 asp.net mvc 的新手,我想知道我所做的是否正确。

我想创建一个用于搜索人的视图。这是我到目前为止所拥有的:

  • 商业模式类:

    public class Person
    {
      public int Id { get; set; }
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public Address Address { get; set; }
      public DateTime DOB { get; set; }
      public List<Telephone> Telephones { get; set; }
    }
    
  • 视图模型类:

    public class SearchPersonViewModel
    {
      public int Id { get; set; }
      public string FullName { get; set; }
      public string LicencePlate { get; set; }
      public string CarMake { get; set; }
      public string CarModel { get; set; }
    }
    
  • 部分观点:

    @model IEnumerable<MvcApplication2.Models.SearchPersonViewModel>
    
    @foreach (var item in Model)
    {
     @Html.DisplayFor(m => item.Id)
     @Html.DisplayFor(m => item.FullName)              
    }
    
  • 调用局部视图的视图:

    @Html.Action("Search", "Person");
    

*PersonController中的控制器方法:

    [ChildActionOnly]
    public ActionResult Search()
    {
         List<SearchPersonViewModel> model = new List<SearchPersonViewModel>();
         model.Add(new SearchPersonViewModel() { FullName = "test", Id = 3 });

        return PartialView("_SearchPerson", model);
    }

现在的问题是每当加载主视图时都会调用 Search 方法。我想要的是在主视图上添加一个搜索文本框,用于过滤在部分视图中呈现的集合。我怎么能那样做?

4

3 回答 3

2

这样,您的部分将仅在点击时呈现

<script>

(function($){
   $('#btn').click(function(){
      $('#searchresult').load('@Url.Content("~/Person/Search")');

}
</script>
于 2013-01-31T01:30:17.183 回答
1

向 /search 发出 ajax 请求并将数据附加到您的页面。

<div id = 'searchresult'>
@Html.Action("Search", "Person");
</div>

每当你想过滤调用类似 $('#searchresult').load('/search?q=xxx');

于 2013-01-30T13:44:40.670 回答
1

您可以使用 2 种方式:

  • 微软 ajax 助手
  • jQuery

对于他们两个,你需要删除[ChildActionOnly]@Html.Action("Search", "Person");

看这个例子:Using Ajax.BeginForm with ASP.NET MVC 3 Razor

于 2013-01-30T13:54:02.980 回答