asp.net mvc按需呈现部分视图

时间:2013-01-30 13:23:30

标签: asp.net-mvc partial-views

我是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; }
    }
    
  • ViewModel类:

    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方法。我想要的是在主视图上添加一个搜索文本框,用于过滤在局部视图中呈现的集合。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您可以使用两种方式:

  • microsoft ajax helpers
  • jquery的

对于这两者,您需要删除[ChildActionOnly]@Html.Action("Search", "Person");

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

答案 2 :(得分:1)

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

<script>

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

}
</script>