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);
    }

使用法:

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

1 に答える 1

1

Model を Ajax 呼び出しで返し、考えているように View を更新する簡単な方法はないと思います。したがって、通常の POST/GET を実行するか、少し回避策を講じることができます。

    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);

次に、クライアント側で各要素の値を手動で設定します。

于 2012-04-11T19:46:49.237 に答える