2012-06-15 5 views
3

Добрый день, все.Html.RenderPartial не производит значение

Я знаю, что это довольно простой вопрос с точки зрения MVC, но я не могу на всю жизнь получить @ Html.RenderPartial, чтобы не давать мне ошибок. Я использую VB.NET и Razor. Большинство примеров, которые я нашел в Интернете, написаны на C#, что для меня не сложно преобразовать, но этот простой заставил меня остановиться. Это, на мой взгляд Index, который визуализируется в _Layout.vbhtml:

@Section MixPage 
    @Html.RenderPartial("_MixScreen", ViewData.Model) 
End Section 

Данное выражение не производит значения.

Я посмотрел на некоторое время этим утром, и страницы, которые я принимаю примеры из заключаются в следующем:

http://geekswithblogs.net/blachniet/archive/2011/08/03/walkthrough-updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx

Getting a Partial View's HTML from inside of the controller

В конце концов, что я пытаюсь сделать, это возвратной и обновленной модели до частичного обзора с контроллера:

Function UpdateFormulation(model As FormulationModel) As ActionResult 
     model.GetCalculation() 
     Return PartialView("_MixScreen", model) 
    End Function 

и этот контроллер в настоящее время вызывается из выражения в JavaScript:

function UpdateResults() { 
    jQuery.support.cors = true; 
    var theUrl = '/Home/UpdateFormulation/'; 
    var formulation = getFormulation(); 
    $.ajax({ 
     type: "POST", 
     url: theUrl, 
     contentType: "application/json", 
     dataType: "json", 
     data: JSON.stringify(formulation), 
     success: function (result, textStatus) { 
      result = jQuery.parseJSON(result.d); 
      if (result.ErrorMessage == null) { 
       FillMixScreen(result); 
      } else { 
       alert(result.ErrorMessage); 
      } 
     }, 
     error: function (xhr, result) { 
      alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status); 
      alert("responseText: " + xhr.responseText); 
     } 
    }); 
} 

Если есть лучший способ вернуть эту обновленную модель с точки зрения и только обновлять этот частичный вид я есть все уши. Но предпосылка этих вопросов: почему RenderPartial не дает значение?

ответ

1

Ну, проблема с клиентом в том, что вы ожидаете, что html не является Json на вашем клиенте, помните, что возвращать представление, в основном, вы возвращаете компиляцию вида, которая html меняет тип данных, ожидаемый в вашем результат в HTML

$.ajax({ 
    type: "POST", 
    url: theUrl, 
    contentType: "application/json", 
    dataType: "html", 
    data: JSON.stringify(formulation), 
    success: function (result, textStatus) { 
     result = jQuery.parseJSON(result.d); 
     if (result.ErrorMessage == null) { 
      FillMixScreen(result); 
     } else { 
      alert(result.ErrorMessage); 
     } 
    }, 
    error: function (xhr, result) { 
     alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status); 
     alert("responseText: " + xhr.responseText); 
    } 
}); 

Также рекомендую вам, что использовать метод load, который является короткая версия AJAX и предполагает всегда, что ожидаемый результат это HTML и, S добавляется к телу элемента, вам нужно

Второе. Если вы хотите загрузить парциальное из макета сделать это как этот

//note's that i'm calling the action no the view 
@Html.Action("UpdateFormulation","yourController", new { model = model}) //<--- this is code in c# don't know how is in vb 
+0

безупречный! Благодаря! – AaronBastian

9

Html.RenderPartial пишет непосредственно к ответу; он не возвращает значение. Таким образом, вы должны использовать его внутри блока кода.

@Section MixPage 
    @Code 
     @Html.RenderPartial("_MixScreen", ViewData.Model) 
    End Code 
End Section 

Вы также можете использовать Html.Partial() без блока кода, чтобы сделать то же самое, потому что частичный() возвращает строку.

@Section MixPage 
    @Html.Partial("_MixScreen", ViewData.Model) 
End Section 
+0

очень хороший ответ. Это очень ясно и отвечает на другую часть моего вопроса. Благодаря! – AaronBastian

 Смежные вопросы

  • Нет связанных вопросов^_^