ASP.NET MVC, ajax, обновление нескольких div-ов

6yrop

Как такое делается?
В Интернете в принципе есть несколько вариантов, но мне не один не нравиться...
Если вы это делали напишите, пожалуйста, как.
P.S. а вWebForms-ах были updatepanel-и.... эх...

okis

А что именно не нравится? Получается json с нужными полями, проставляется $("#mydiv").text — самый прямой способ.

6yrop

А что именно не нравится?
В ASP.NET MVC проблема сгенерировать несколько HTML кусков. Ну то есть вроде решения есть, но это типа хаков.

6yrop

Получается json с нужными полями
я имею ввиду, что HTML формируется на сервере, поскольку с серверным шаблонизатором проще работать

Dasar

правильное решение: формируешь json, где элементами являются куски html-ей, а дальшей через $(#mydiv).html(..) заменяешь.
зы
>В ASP.NET MVC проблема сгенерировать несколько HTML кусков. Ну то есть вроде решения есть, но это типа хаков.
наговариваешь на asp.net mvc.

6yrop

зы
>В ASP.NET MVC проблема сгенерировать несколько HTML кусков. Ну то есть вроде решения есть, но это типа хаков.
наговариваешь на asp.net mvc.
ты учитываешь, что html хочется формировать view engine-ом? а не стринг билдером.
Самое лучшее что удалось нагуглить это вот (см. последний ответ)
http://stackoverflow.com/questions/2483885/how-to-refresh-mu...
А проблемы начинаются с метода RenderPartialToString.

6yrop

А проблемы начинаются с метода RenderPartialToString
для Razor-а ситуация вроде неплохая, т.е. там хаки не нужны, чтобы записать в другой TextWriter.
Но всё же хочется еще большего, не хочется в обязательном порядке выделять кусок html-я в partial view, хочется просто окружать кусок лямбдой :).

Dasar

>А проблемы начинаются с метода RenderPartialToString.
он нафиг не нужен, т.к. есть Html.Partial
можно сделать все без хаков, делая склейку и генеря json во вью, но удобнее делать маленький хак: получать из контроллера доступ к view (через ручное создание htmlhelper-а при этом json будет генерить сам asp.net mvc
будет так

public ActionResult Divs(..)
{
var Html = this.Html;
...
return Json(new { div1 = Html.Partial("Div1", ...).ToString div2 = Html.Partial("Div2", ...).ToString });
}

где this.Html

public static HtmlHelper Html(this Controller controller)
{
if (controller == null)
return null;
return new HtmlHelper(new ViewContext(controller.ControllerContext, new WebFormView("omg" new ViewDataDictionary new TempDataDictionary new System.IO.StringWriter new ViewPage;
}

6yrop

неплохо :), спасибо!

6yrop

>А проблемы начинаются с метода RenderPartialToString.
он нафиг не нужен, т.к. есть Html.Partial
Html.Partial это и есть RenderPartialToString (и это все на view). Просто я не знал Html.Partial :). Странно, что в интернетах много пишут про реализации RenderPartialToString, а про Html.Partial мне не встретилось, ну да ладно, может это просто устаревшая инфа.
А по удобству использования по той ссылке немного удобнее. Анонимные классы и такие json объекты избыточны, проще описывать сразу мепинг id-шников div-ов на имена partial view-шек.
P.S. формат передачи можно и json-ом сделать, а не явным скриптом, но это всё заворачивается в один общий метод.

Dasar

>Анонимные классы и такие json объекты избыточны, проще описывать сразу мепинг id-шников div-ов на имена partial view-шек.
так тоже должно работать

...
var data = new Dictionary<string, string>
data["div1"] = Html.Partial("Div1", ...).ToString;
data["div2"] = Html.Partial("Div2", ...).ToString;
return Json(data);

6yrop


return new HtmlHelper(new ViewContext(controller.ControllerContext, new WebFormView("omg" new ViewDataDictionary new TempDataDictionary new System.IO.StringWriter new ViewPage;

здесь new WebFormView("omg") и new System.IO.StringWriter смотрятся лишними. Я посмотрел рефлектором, действительно, можно без них. И в интернете тоже такое решение есть:
http://craftycodeblog.com/2010/05/15/asp-net-mvc-render-part...
То есть можно совсем без хаков :).
Оставить комментарий
Имя или ник:
Комментарий: