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

我认为没有一种简单的方法可以在 Ajax 调用中返回您的模型并按照您的想法更新视图。因此,您可以进行常规的 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=重新加载整个页面。

如果您必须在一次通话中完成此操作,则需要执行类似的操作

return Json(model);

然后在客户端手动设置每个元素的值。

于 2012-04-11T19:46:49.237 回答