2012-04-11 8 views
0

コントローラ内で定義された標準的なメソッドからビューを更新するにはどうすればよいですか?このメソッドは、私が接続するjqueryプラグインから呼び出されています。(クライアントから呼び出された)通常のコントローラメソッド内でビューを更新するにはどうすればよいですか?

ビュー:

@model ViewModel 

    @Html.EditorFor(model => model.First) 
    @Html.EditorFor(model => model.Last) 

    @Html.EditorFor(model => model.Junk) 

コントローラ方法:

// Called from third party jquery plugin 
    public string DoSomeWorkAndUpdateMyView(string Id) 
    { 
     // Get persisted View from dbcontext... 
     // Create a new Junk object with the new id and add it to the db context 
     // Update the view with the newly added junk object 
     ViewModel model = dbContext.GetViewStuff(); 
     model.Junk.Add(new junk); 

     return View("JunkView", model); 
    } 

使用法:私はAjaxの呼び出しであなたのモデルを返却する簡単な方法があるとは思わない

... 
    onComplete: function (event, queueID, fileObj, response, data) 
       { 
        $.ajax(
       { url: '@Url.Action("ProcessForm","Home")', 
        data: { first: $("#fname").val() }, 
        success: function (data) { 
         $("#fname").val(data); 
        } 
       }) 
       } 
    ... 
+0

これはAjaxコールですか? –

+0

@SteveMallory:はい – JaJ

答えて

1

あなたがそれについて考える方法を更新してください。だから、どちらか定期POSTに/取得することができ、または周りに少し作業を行います。

public JsonResult DoSomeWorkAndUpdateMyView(string Id) 
    { 
     Dictionary<string, string> result = new Dictionary<string, string>(); 

     if (DoSomeWork()) 
     { 
      result.Add("status", "success"); 
      result.Add("id", Id); // any info the client will need to reload the page 
     } 
     else 
     { 
      result.Add("status", "error"); 
      result.Add("error", "Some Error Message"); 
     } 

     return Json(result); 
    } 

そして、受信側で応答ステータスを確認してください。 「成功」の場合は、document.location=を使用してページ全体をリロードします。

あなたは1回の呼び出しでそれを行う必要がある場合は、

return Json(model); 

ような何かをして、手動でクライアント側での各要素の値を設定する必要があります。

+0

クール.....ありがとう! – JaJ

+0

QQ、私のコントローラメソッド(クライアントから呼び出されたコントローラメソッド)からビューを更新したいのですが?それは可能ですか?私はコントローラメソッドからモデルを更新しようとしましたが、それはモデルを更新しますが、ビューをリフレッシュしません。 – JaJ

+0

Ajaxコール中に別のアクションをロードすることを意味しますか?私は実際に何が起こるかわからない。これを行うには、 'DoSomeWorkアクションでreturn RedirectToAction(" JunkView "、new {id = Id});を実行します。それを試して、報告してください。 –

関連する問題