刷新 Json 部分视图。

3

我想刷新Json Partial View。我正在尝试使用以下方法:

$('#example123').load('@Url.Action("Rejestracja", "Logowanie")');

但是功能没有正确工作。

$.ajax({
            url: '@Url.Action("Rejestracja", "Logowanie")',
            dataType: "json",
            type: "POST",
            async: false,
            error: function () {
            },
            success: function (data) {
                if (data.Success) {

                    var el1 = $('<div><strong style="color: black" id="example123">' + data.View + '</strong></div>');
                    $(el1).dialog(
                        {
                            modal: true,
                            title: '<div></div>',
                            minWidth: 340,
                            minHeight: 300,
                            buttons: {
                                'Zamknij': function () {
                                    $('#example123').load('@Url.Action("Rejestracja", "Logowanie")');
                                    $(this).dialog("destroy");


                                }
                            }
                        });
                }

            }
        });

JSON部分视图

[HttpPost]
        public JsonResult Rejestracja()
        {
            bool dataCahnged = true;
            var model = new Logowanie();
            object view = this.RenderPartialViewToString("Rejestracja", model);
            return Json(new { Success = true, dataCahnged, View = view });
        }

(此工作仅第一次有效)

<script type="text/javascript">
    $('#bladReje').hide();
    $('#bladRejeText').hide();
    $('#poprawnieReje').hide();
    $('#poprawnieRejeText').hide();


    </script>

示例(仅第一次有效)

<div id="ex"></div>
<script type="text/javascript">
    $('#ex').text('sasasa');
    </script>

请在这里发布您的服务器方法。 - Cristi Pufu
发生了什么?example123 div没有加载。您是否在IE中使用F12或fiddler检查是否向您的部分页面发出请求? - Devesh
@Devesh,example123的加载是正确的,但我不知道它是否与Json有关的问题。 - Rafał Developer
所以,根据我的理解,您进行了一个ajax调用,使用响应数据视图创建了一个对话框,并在对话框的关闭按钮上调用相同的方法来填充#example123? - Cristi Pufu
1
我会创建一个带有唯一ID的DIV。使用Html.RenderAction加载其内容(第一次调用)。在主视图上创建对话框并将其放置在DIV上。按钮函数将提交数据,在成功后直接刷新DIV而无需重新创建对话框。 - developer10214
显示剩余10条评论
2个回答

0

你特别选择使用“POST”方式调用ajax的原因是什么?因为你没有向服务器发送任何信息,所以这是我首先要更改的事情。尝试将其更改为GET。

其次,尝试更改你的方法以获取视图HTML并返回字符串。我正在使用此扩展方法,它可以正常工作:

public static class JsonHelper
{
    public static string RenderPartialView(this Controller controller, string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

        controller.ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
            var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }
}

这里是一个关于如何使用它的示例:

 public ActionResult GetClientList()
 {
     List<ClientModel> clientList = ClientRepository.GetClients();
     return Json(new JsonMixedResult { Result = "success", ViewHtml = this.RenderPartialView("ClientList", clientList) }, JsonRequestBehavior.AllowGet);
 }

最后,请检查返回的 JSON 语句中的最终参数。这使得您的客户端代码可以从控制器中访问返回的数据。在本例中,返回的是一个包含您视图 HTML 的 Json 对象。

希望对您有所帮助。


0

我不明白为什么你不直接返回PartialView???我的意思是,你的Json结果返回了你的部分视图和另外两个属性,表示成功和数据已更改,但这两个属性对我来说看起来毫无意义。为什么你不在你的操作中这样做:

[AjaxOnly]
public PartialViewResult Rejestracja()
{
    var model = new Logowanie();
    return PartialView("Rejestracja", model);
}

然后你的ajax调用会像这样:

$.ajax({
    url: '@Url.Content("~/Logowanie/Rejestracja")',
    dataType: "html",
    type: "GET",
    error: function () {
       // Handle errors here...    
    },
    success: function (html) {
        $("#someDivOnYourPage").html(html);
    }
});

这样,整个部分视图将被放置在页面上您选择的 div 中...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接