2012-10-12 2 views
5

Ajax呼び出しでMVC Webサイトを作成しようとしています。私は直接jqueryを使用しても問題はありませんが、@ Ajax.ActionLinkを使用すると、結果が得られません。 は、ここに私の見解である:MVC 4 Ajax.Actionリンクが動作しません

<script type="text/javascript"> 
     function deleteComment(id) { 
      $.post(
       "/Role/AjaxTest", 
       //{ id: id }, 

       function (data) { 
        $("#testtarget").html(data);    
       }); 
     } 
    </script> 


    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
    <h2>TITLE</h2> 
    <p> 
@Ajax.ActionLink("Ajax Test", "AjaxTest", "Role", new AjaxOptions{UpdateTargetId="testtarget",HttpMethod = "Get" , InsertionMode = InsertionMode.Replace }) 
    </p> 
    <table>  
    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.RoleName) 
      </td> 
      <td> 
       <a onclick="deleteComment('@item.RoleId'); return false;" href="#">Delete</a> 
       @Html.ActionLink("Delete", "Delete", new { id=item.RoleId }) 

      </td> 
     </tr> 
    } 
    </table> 
    <div id="testtarget">Test Div</div> 

とここに私のcontrolerデータである:

public string AjaxTest() 
{ 
    return "Some random text"; 
} 

jQueryの上の私のコールが完璧に動作し、テキストはdivの中に表示されますが、私のActionLinkのはちょうどに私をリダイレクトしますローカルホスト/ロール/ AjaxTestので、私はちょうど銀行のブラウザでメッセージを持っている。

何が間違っていますか?

ありがとうございます!

<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script> 

またはあなたがこのスクリプトを含むバンドルが含まれていることを確認してください(推奨されるアプローチである)のバンドルを使用している場合を:

+0

'jquery.unobtrusive-ajax.min.js'ファイルがロードされていますか? –

+0

はい、私のウェブページのソースのリンクをクリックすると、が開きます。 – Tom

答えて

9

はあなたのページにjquery.unobtrusive-ajax.jsスクリプトを追加したことを確認してください。あなたは~/bundles/jqueryvalバンドルになり、インターネットのテンプレートを使用して、新しいASP.NET MVC 4プロジェクト作成時にたとえば:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
    "~/Scripts/jquery.unobtrusive*", 
    "~/Scripts/jquery.validate*") 
); 

をだから、それはjqueryのバンドルした後、あなたのビューに含まれていることを確認します

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 

または、それらを1つのバンドルにまとめてください。それはすべてあなたの要件と、控えめなjquery検証のサポートが必要かどうかにかかっています。

私はまた、文字列、あなたのコントローラのアクション・リターンのActionResultを持っていないためにあなたをお勧めします:あなたはあなたのコンソールで任意のスクリプトエラーを取得する場合

public ActionResult AjaxTest() 
{ 
    return Content("Some random text"); 
} 
+1

完璧、ありがとう、非常に、私のプロジェクトでは、私は@ Scripts.Render(〜/バンドル/ jqueryval)を持っていなかったと言ったすべて。だから、私はそれを私のページに追加し、それをトリックにしました。これをレイアウトのマスターページに入れるのは賢明ですか?私はそれがたくさんのページで使われるようになると思います。あなたの助けをありがとう!これに4時間くらい止まった... – Tom

2

は、お使いのブラウザとチェックでF12を使用してみてください。 Fiddlerは、あなたのライブラリのいずれかが正しく参照またはロードされていないかどうかを確認するのに役立ちます。

+0

ありがとう!それは私の問題の一部だったので、jqueryは定義されていなかったので、私は次の投稿が示唆したことをしました。 – Tom

関連する問題