Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
1

@Html.Partial vs UserControl.ascx в Razor

05.03.2013, 14:02. Показов 2274. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если я правильно понял, то @Html.Partial это аналог юзер.контролов.

Как правило, юзер.контрол это не только разметка, но и функциональная логика , которая может быть довольно сложной , например: в момент своей загрузки OnLoad, он опрашивает веб.сервисы, подключается к своим настройкам в БД и т.п , инициирует те или иные свои свойства, реагирует на те или иные действия пользователя. Вся эта логика , естественно , вынесена за пределы разметки, и содержится, например, в отдельной сборке контролов, а в разметке остается лишь html и ссылка на сборку и класс контрола.

Теперь вопрос:
Как подобное провернуть в Razor ? ,
т.е я даю ссылку на контрол: @Html.Partial("~/Shared/Controls/MyControl.cshtml"), где содержится его разметка, и , вместо того что бы городить огород из @{ }, я хочу вызвать экземпляр класса этого контрола, который реализует вышеописанную логику по настройке вьюхи MyControl.cshtml.
И , по возможности, хотелось бы "коробочное" решение, т.е мой Razor контрол должен быть самодостаточным, и не зависеть от "внешних" файлов приложения, в котором он используется.

Добавлено через 9 минут
Например, что то в этом духе:
MyControl.cshtml:
HTML5
1
2
3
@Setting(thisView)
//далее разметка
//и куда/кому направлять серверную обработку действий юзера ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2013, 14:02
Ответы с готовыми решениями:

Передать данные в Html.Partial
Есть вьюшка, в ней есть Html.Partial(childView). Как можно в childView передать данные? Допустим, в...

Razor. HTML не предоставляет метод DisplayFor
@model ICollection<Category> Category - моя модель model подчеркивает красным ...

не выводятся абзацы в Html.DisplayFor() (Razor MVC3, C#)
string text = Model.IAText.Replace("\n", "<p><p/>"); @Html.DisplayFor(i => text).ToHtmlString(); ...

Custom Control не выводит HTML текст с ascx-страницы
Создал Custom Control. Для его реализации мне пришлось в CodeBehind-е перегрузить несколько...

2
519 / 511 / 68
Регистрация: 19.09.2011
Сообщений: 826
05.03.2013, 14:31 2
Если нужна сложная логика, то лучше используйте
HTML5
1
@{Html.RenderAction("action","controller");}
В принципе, при большем желании, ну очень большем и так делать настоятельно не рекомендуется, можете всю логику поместить во вьюв в блок
HTML5
1
2
3
@{
   // TO DO
}
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
05.03.2013, 23:00  [ТС] 3
@{Html.RenderAction("action","controller");}
ок, а как сослаться на контроллер в другой сборке ? т.е как я понимаю движок по умолчанию ищет контролеры в текущей сборке приложения.

Похоже что как то так: MyControl.cshtml
HTML5
1
2
3
4
5
6
7
8
9
10
@model MyControlsSpace.MyControl //тут видимо автоматический поиск класса по всем загруженным сборкам
@{ Model.Init();//тут вся логика инициализации }
<h1>@Model.Header<h1> //ок, это мы получаем текущие свойства после инициализации контрола.
<select name="List1" onchange=". ??? обработка на стороне сервера, куда постить ? .">
....
</select>
<select name="List2">
//тут динамический контент в зависимости от значения List1
@foreach(var listItem in Model.List2Items) ....
</select>
-
теперь нужно делать запросы к серверной части контрола по тем или иным действиям со стороны пользователя.
просто что бы понять какие есть аналоги событийной модели WebFroms., в подобных сценариях.

Добавлено через 5 часов 23 минуты
Немного покопавшись в интернете , пришел к выводу что каких либо механизмов на этот счет в Razor шаблонах не предусмотрено (хотя классические ascx использовать никто не запрещает). И с контроллерами беда , все вызовы контролеров заточены на работу с маршрутами, делать URL маппинг на каждую функцию юзер.контрола это не дело (особенно если URL меняться не должен), ему вообще должно быть по барабану какой там URL т.к все данные передаются POST методом , соответственно нужно как то обеспечить инициализацию контроллера для юзер.контрола и вызов соответствующего экшена, на основе POST данных по тому же URL. - если это вообще возможно.
Иначе делаем все ручками, постим данные по текущему URL, в результате чего MVC цикл повторяется, в cshtml делаем проверку @IsPost-а и соответственно обрабатываем новые данные формы которые передаем модели, так же ручками заботимся о сохранении состояний между запросами. Плюс, если однотипных контролов на странице несколько, заботимся о правильной адресации. Короче вся логика контроллера реализуется вручную в фaйле cshtml. Печалька (.
Поправьте если не прав...

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@model MyControlsSpace.MyControl //тут видимо автоматический поиск класса по всем загруженным сборкам
@{ 
      if(IsPost)
      {
          var param1 = Request["ControlID_List1_Value"];//псевдокод
          var param2 = Request["ControlID_List2_Value"];
          Model.Init(param1,param2);
      } else Model.Init();
}
<h1>@Model.Header<h1> //ок, это мы получаем текущие свойства после инициализации контрола.
<select name="List1" onchange="@Html.CurrentUrlPost">
....
</select>
<select name="List2">
//тут динамический контент в зависимости от значения List1
@foreach(var listItem in Model.List2Items) ....
</select>
Добавлено через 8 минут
234
0
05.03.2013, 23:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2013, 23:00
Помогаю со студенческими работами здесь

Проблемы foreach null внутри @Html.Partial
Возникли проблемы foreach null внутри @Html.Partial. Как исправить? Помогите? Вот код Мой...

Какой визуальный редактор использовать для html + razor?
Приветствую! Я использую visual studio code для создания/редактирования файлов с расширением...

Как получить аттрибут html-тега из partial view в JavaScript?
Привет, дело в следующем. Есть главное view в котором в list скриптом загружается partial view...

Как получить значение @Html.TextBox, который сделан в partial View?
Добрый день Как получить значения календаря. Этот календарь сделан в partial View Хочу получить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru