2011-09-15 25 views
13

this questionをチェックして、私の初期の問題を解決しました。しかし、ユーザーがリンクをクリックしたときにのみ部分ビューをレンダリングする必要はなく、部分ビューがロードされているときに部分ビューをレンダリングし、部分ビューがロードされている間に進行状況インジケータを表示することもできます。ajaxを使用して部分ビューをレンダリングする

これを達成する方法は?

ありがとうございます。

答えて

7

@Html.Partial(...)と書いて最初のページに表示することができます。あなたがページをロードし、その後、AJAX経由部分ビューをロードしたい場合は、ActionMethodことを(jqueryのAJAX操作を使用して)デフォルトページ

<div id='mod1'>Loading...</div> 
<script type="text/javascript"> 
      $("#mod1").load("/ControllerName/GetModule?partialName=test1");   
</script> 
+0

Think @ Html.ParitalはAjax、jqueryでは使用できません。 – Shan

+0

@Shan:サーバー側のことです。それはそれとは関係ありません。 – SLaks

+0

@SLaksは、メインビューが表示された後に表示する部分的なビューが必要なようです(おそらく長い時間の初期処理を避けるためです)。あなたが提案する@ Html.Partial()は、私が知っている限り、メインビューと共にサーバー上で処理されます。それで、それは男の問題を解決しません。私はまた最初に質問で騙された。 – cnom

8

コントローラ

public ActionResult GetModule(string partialName){ 
    return PartialView("~/Views/Shared/"+partialName); 
} 

を作成することができます次のようなことをします:

public ActionResult Create() 
{ 
    var model = new MyModel(); 

    if (Request.IsAjaxRequest()) 
    { 
      return PartialView("_Partial", model.PartialModel); 
    } 
    else 
    { 
      return View(model); 
    } 
} 

あなたのページで次のようなもの:

$(function(){ 

    $(document).ajaxStart(function() { 
     //show a progress modal of your choosing 
     showProgressModal('loading'); 
    }); 
    $(document).ajaxStop(function() { 
     //hide it 
     hideProgressModal(); 
    }); 

    $.ajax({ 
      url: '/controller/create', 
      dataType: 'html', 
      success: function(data) { 
      $('#myPartialContainer').html(data); 
      } 
    }); 
}); 
+0

「Partial View」のファイル形式を入れる必要はありますか? .cshtmlのように –

関連する問題