2016-10-10 6 views
1

ページにデータの「クローン」を作成しようとしました。要約すると、私は顧客作成ジョブ画面と別個の顧客管理ジョブ画面を持っています。これらはどちらもうまく動作します。既存の顧客ジョブデータを「複製」して、新しい類似のジョブセットを作成する必要があります。私の管理画面には、クローンボタンがあります。これは、元のデータであらかじめ設定されたデータから、1つまたは2つの関連する特定の情報を除いた、「作成」ページに移動します。職種名。新しいビューにデータを読み込もうとしています

私の問題は、ビューモデルで新しいデータを使用して作成ページにリダイレクトする投稿を取得できないようです。これによりデータが保存されるため、送信アクションを実行できません。クローン作成中のデータは、管理画面と作成画面の間で保持されません。私CSHTMLで

::私はでてるのはここ

がある

function CloneJob(jobId) { 
$.post('CloneJob', { JobId: jobId }, function (data) { 
    window.document(data); 
}); 

<button type="button" name="btnClone" value="btnClone" id="btnClone" formaction="CloneJob" class="btn btn-primary" style="width: 150px;">Clone</button> 

これは、この機能をオフに発射現在のジョブIDをつかむためにクリックイベントをオフに発射

}

私のコントローラでは、私はこれを持っています:

[HttpPost] 
public ActionResult CloneJob(Guid jobId) { 
    // logic which wipes off the old data job from the view model 
    // eg names, ids, etc. but leaves the actual job details intact 

return View("CreateJob", manageJobViewModel); 

これから、IE/Chromeデバッグネットワークセクションで返されるHTMLが表示されますが、データが格納されたCreateJobビューには移動しません。

私には何が欠けていますか?

+0

コントローラでは、完全に入力されたJobViewModelがあると思われるコメントが表示されますが、そうではありません。コントローラは、要求の間に状態情報を保持するようにプログラムしないかぎり、状態情報を保持しません。あなたが渡すjobIdを使って、データベースからJobModelViewを作成するだけで済むと思います。 –

+0

私が残したロジックは実際にJobViewModelに取り込まれます。私はちょうどセッションビューモデルをつかんで、それをきれいにして、私は自分のCreateJobs画面に戻したいmanageJobViewModelとして終わります。私はこのロジックが動作するのはうれしく、デバッグするときにそうなるはずです。 – JonSick

+0

'return view'の前にデバッガにJobViewModelが表示されていれば、それは*働くはずです。前に 'window.document(...)'構文を見たことがありません。私は一般的に 'window.document.body.innerHtml ='だが、bodyタグの内側にあるページの部分だけを読み込むだろう。 Fiddler Webデバッガを使用して、ブラウザに正確に何が送信されているかを確認することができます。 –

答えて

0

私はこれを解決することができました。

マイCSHTMLは今、このコードが含まれています。

@Html.ActionLink("Clone Job", "CloneJob", null, new { @class = "btn btn-default", @style = "width: 150px" }) 

私のコントローラは、単にセッションから現在のviewmodelをつかみ、仕事のクローンを作成するためにそれを使用しています。次に、コントローラは、メソッド内に設定した新しいモデルでビューを返します。

return View("CreateJob", clonedJobViewModel); 

私はそれを見ると今はシンプルですが、そこに行くことです。

1

最初に、タブ/ウィンドウの内容全体を置き換える場合は、AJAXを使用しないでください。ポイントはありません。それは、維持するだけの余分なものです。代わりに、標準のリンクを利用してください。第二に、何かが変化しているときにのみPOSTを行うべきです。これは単純なGETリクエストでなければなりません。

「作成」URLへのリンクを作成し、複製されるジョブのIDを渡します。作成アクションでは、そのIDに基づいてデータベースからそのジョブを検索し、ビュー・モデルにデータを移入してビューに戻すことができます。

ボタンのように見えるようにするには、ボタンのようにリンクをスタイルするだけですが、標準的な古い<a>タグを使用する必要があります。

0

私はそれが今では "うまくいく"ということをさらに進めてきました。私のコントローラが変更されていませんが、私のjavascriptのは今です:

$.when($.get('CloneJob', {jobId: jobId})) 
.then(function (response) 
{ $("body").html(response); }); 

は、私は、これはアヤックスままであることを承知しているが、より技術的に許容され、代替の顔には、この作業を行います。これは、ajaxの誤用の少しであることを理解しているので、より技術的に巧妙なアプローチのためのアドバイスを取ることを嬉しく思うでしょう。

関連する問題