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; }
    }
    
  • 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 メソッドが呼び出されることです。私が望むのは、メインビューに検索テキストボックスを追加して、部分ビューでレンダリングされたコレクションをフィルタリングすることです。どうすればそれができますか?

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 つの方法を使用できます。

  • Microsoft ajax ヘルパー
  • jquery

それらの両方について、削除する必要があり[ChildActionOnly]ます@Html.Action("Search", "Person");

次の例を見てください: ASP.NET MVC 3 Razor で Ajax.BeginForm を使用する

于 2013-01-30T13:54:02.980 に答える