2012-04-26 7 views
4

ajaxを使用して部分ビューをレンダリングします。
ボタンを送信すると、パーシャルビューがレンダリングされる必要があります。
ActionLinkを使用して実装できましたが、JavaScriptでActionを呼び出す必要があります。
ただし、次のコードは機能しません。アクションは呼び出されますが、部分ビューはレンダリングされません。
jQuery ajaxでUpdateTargetIdを設定する方法

ビュー

@section script{ 
<script type="text/javascript"> 
    function test() { 
     $.ajax(
     { 
      type: "POST", 
      url: "Test", 
      data: "", 
      success: function (result) { alert("OK!!"); }, 
      error: function (req, status, error) { 
       alert("Damn!!");} 
     }); 


    } 
</script> 
} 

<input type="submit" onclick="test()" /> 
<div id="Container"> 

コントローラ

public ActionResult Test() 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     return PartialView("ViewUserControl1"); 
    } 
    return View(); 
} 

部分図ViewUserControl1

Hello world 

これは動作しますが、私は正しくない可能性があり

@Ajax.ActionLink("click me", "Test", new AjaxOptions { UpdateTargetId = "Container" }) 

答えて

6

URLをやりたいものではありません。ルーティング設定に依存します。 はGlobal.asaxで定義されています。しかし、あなたの行動がHomeControllerにある場合、通常あなたのURLは "/ Home/Test"のようになります。クリアすることを忘れないでください、あなたはブロックを更新したい場合にも

... 
success: function (result) { $('#elementId').html(result) }, 
... 

:あなたは次のようにあなたの部分をレンダリングすることができます

... 
url: '@Url.Action("Test", "Home")' 
... 

:それはアクションのURLを取得するため URLヘルパーを使用することをお勧めします最初にそれが邪魔にならない検証とフォームを含んでいれば、フォームを解析します。

+0

私は次のURLを指定しました:url: "./Controller/Action/{id}" – shammelburg

+0

これは素晴らしいです!私は今、MVCの私のチェックボックスのJavascript関数にUpdateTargetIDを渡すことができます。私はここで行ったようにUpdateTargetIDにシャープ記号を付けなければなりませんでした。ユーザーがボックスをチェックすると、別のdivコンテナでリストを即座に更新できます。 – MikeTeeVee

関連する問題