2013-04-11 3 views
3

Я хотел бы обновить Json Partial View. Я стараюсь использовать это:обновить 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> 
+0

отправьте свой серверный метод здесь –

+0

Что происходит? Является ли example123 div не загруженным. Использовали ли вы F12 в IE или скрипач, чтобы проверить, сделан ли запрос на вашу частичную страницу или нет? – Devesh

+0

@Devesh example123 загружен правильно, но я не знаю, не проблема с Json. –

ответ

0

Любая причина, в частности, почему вы вызываете ajax, используя «POST» ?, вы не отправляете какую-либо информацию на сервер, так что это первое, что я изменил бы. Попробуйте изменить это на 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. Это позволяет вашему клиентскому коду получить доступ к возвращенным данным от вашего контроллера. В этом случае это объект Json, который включает ваш html.

Надеется, что это помогает

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 с вашей выбор на странице ...