2017-03-10 21 views
0

外部のJSファイルでボタンクリックが発生しましたが、別のビューにリダイレクトしようとしています。私はコントローラファイルでActionResultを取得していますが、最初のビューから移動したくありません。私はのActionResultに到達するために使用しています外部JavaScriptファイルからの表示にリダイレクトする方法

私のコードは

$('#Req1').on('click', function() { 
    console.log("Called"); 
    $.ajax({ 
     type: "POST", 
     url: "/FruitStandHome/Requirement1", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: function (data, textStatus, jqXHR) { 
     } 
    }); 
}); 

で、コントローラ内のアクションの結果は、私はすでにこののActionResultにバインドされたビューを持っている

[HttpPost] 
public ActionResult Requirement1() 
{ 
    return View(); 
} 

ですが、として私はクリックイベントでそのビューに私を送信しないと言う。

私は私が何か間違ったことをやっているかなり確信しています。あなたのHTML内

+1

ajaxを使用してリダイレクトすることはできません。 Ajaxの全ポイントは同じページにとどまることであり、Ajaxコールは決してリダイレクトされません。しかし、現在のページに 'Requirement1'メソッドによって返されたビューの結果を表示することができます。リダイレクトする場合は、ajaxを使用しないでください。ボタンをリンクしてください。 –

+0

@StephenMuecke、これを行う方法は他にありますか、ボタンのリンクは唯一の方法ですか? – Chris

+0

ajax呼び出しの成功コールバックでは、 'location.href = '/ FruitStandHome/Requirement1';'を使用できます。しかし、それはパフォーマンスを低下させているだけです。データを送信してリダイレクトしたい場合は、フォームと送信ボタンを使い、このメソッドでリダイレクトするために 'return RedirectToAction()'を使います。しかし、あなたの投稿がなぜデータを保存しない 'Requirement1()'に投稿されたのかは明らかではありません。 –

答えて

1

が返されるビューのHTMLがロードされるコンテナ要素を作成し、我々はID viewcontainerとdiv要素を持っているとしましょう):

<div id="viewcontainer"> 
<!-- All html in here, possibly add this in _Layout.cshtml --> 
</div> 

と別のものの代わりに、ハードコードされたURLを使用して、正しいURLを生成するためのUrl.Actionヘルパーを使用して、次のようhtml5データ属性を利用しないで:

ビューの結果とdiv要素の内容は、サーバから返された0
<button id="Req1" data-url="@Url.Action("Requirement1","FruitStandHome")" /> 

は、今すぐあなたのAJAX呼び出しの更新の成功機能では、コントローラのアクションが可能になるよう、content-typeにJSONを設定する必要はありませんHTMLを返し、どちらもあなたはdatatype JSON我々はこれだけであるためにあなたのAJAX呼び出しのコードを変更し、今のいずれかのパラメータを渡していないように設定する必要があります。

はそれが役に立てば幸い

$('#Req1').on('click', function() { 
    console.log("Called"); 
    var url = $(this).data("url"); 
    $.ajax({ 
     type: "POST", 
     url: url, 
     success: function (data, textStatus, jqXHR) { 
     $("#viewcontainer").html(data); 
     } 
    }); 
}); 

+0

私はそれにショットを与え、それはactionresultを打つだろうが、私はまだ元のビューにしています。私はあなたの以前の答えを試して、ボタンが返されたデータを受け取りました – Chris

+0

あなたはコンテナdivにあなたのビューのすべてのコンテンツを配置する必要があり、n ajaxコール成功はちょうどそのコンテナdivの内容を更新する必要があります –

関連する問題