Получите доступ к тегу html из кода позади в MVC3 - PullRequest
1 голос
/ 11 января 2012

Я пытаюсь объединить два проекта в визуальных студиях 2008

Проект, который я пытаюсь внедрить, стилизован под проекты старой школы asp.net, использующие код настроек для доступа к методам загрузки на странице и т. Д., Но другие проекты - это новый раскрученный проект в стиле MVC3.

Теперь я полностью осознаю, что эти два проекта отображаются по-разному для доступа и, скорее всего, их не следует объединять, но если бы я слушал все то, что мне сказали не делать, у меня не было бы татуировки с плохой задницей ангела, который ест хот-дог на моей левой щеке.

Теперь, когда я говорю о слиянии этих двух вместе, все, о чем я на самом деле говорю, - это добавление одного вида типа .aspx в мой проект MVC3 и его запуск вдоль других представлений, которые там есть. Я был в состоянии внести это, у меня есть функция в настройке контроллера для него, и у меня есть его код, связанный там должным образом, каждая вещь, кажется, идет, но intellisense не признает, что HTML-теги, которые имеют id и свойство сервера runat на них будут объектами в моем коде позади. Он постоянно говорит мне объявить эти переменные.

Что касается дерьма и хихиканья, я попытался объявить их, после чего intellisense улыбнулся и подмигнул мне, прежде чем разбить мои надежды на острый камень, предупредив меня о том, что все переменные уже были объявлены при разборе страницы.

Редактировать: Контроллер выполняет свои собственные задачи, как я уже говорил выше, код ниже обрабатывает функцию загрузки страницы, и в старой настройке вы могли напрямую обращаться к любым тегам html, которые использовали сервер runat Проповедь, я пытаюсь продублировать это на стороне MVC3, я не пытаюсь поместить все это в контроллер. Итак, чтобы прояснить ситуацию, у меня есть Model, View, controller, затем внутри моего представления у меня есть aspx-страница с кодовой страницей с именем filename.aspx.cs, это помогает?

Edit2: OK для этой настройки, как я уже говорил выше, мы использовали vs2008, поэтому у нее есть папки модели представления и контроллера, в которые вы помещаете три отдельные области. У меня есть конкретный вид из другого проекта, который использовал старый код за подходом присоединения файла кода к файлу .aspx с использованием параметра CodeBehind = "Default.aspx.cs", поэтому я извлек этот файл .aspx с его кодом позади файла из старого проекта и вставил его в новый Проект MVC3 и велел им сосуществовать так же, как взрослый говорит ребенку, чтобы он не вставлял что-то в рот (просто потому, что вы говорите им, это не значит, что они собираются). но старый код файла использует функцию загрузки страницы, которая должна инициализировать некоторые html-теги из определенной библиотеки, но я, конечно, не могу получить доступ к этим тегам, и у них нет html-помощников или чего-то такого крутого.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 11 января 2012

Это не так, как работает MVC.С точки зрения контроллера, он не знает ничего о представлении.Между ними нет двунаправленной связи, они не происходят из единой базы (как это делают WebForms) и т. Д. Действие контроллера выполняет некоторую логику, создает модель представления (необязательно) и отправляет эту модель представления (необязательно)на вид.Один путь, назад нет пути.

Так что вместо этого:

TextBox1.Text = "foo";

Вы бы сделали что-то подобное в действии контроллера:

myViewModel.SomeTextField = "foo";

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

@Html.TextBox("name", Model.SomeTextField)

Контроллер никогда не должен, должен никогда не быть привязанным к представлению.По своему замыслу методы действий могут передавать управление любому желаемому представлению.Они не привязаны к «странице», как в WebForms.

Это разделение интересов, инверсия контроля, все эти хорошие вещи.Контроллер создает объект и отправляет его в a представление, любое представление, не имеет значения, какое именно.Представление ожидает модель представления от контроллера , любого контроллера, не имеет значения, какой именно.

0 голосов
/ 12 января 2012

Я нашел решение, все, что мне нужно было сделать, чтобы получить доступ к этим тегам, это использовать функцию FindControl (), в стороне от кода, стоящего за файлом, это было так просто, теперь все работает как чемпион Так что у меня был вид с контролем вроде

<button id="foo" runat="server">

тогда, конечно, у меня был контроллер с функцией

public ActionResult Index()
{
    Return View();
}

и, наконец, у меня есть код, который содержит

protected void Page_Load(object sender, EventArgs e)
{
    ((Button)This.FindControl("foo")).DoSomething();    
}

Легкий гороховый лимонный сжимающий.

спасибо за помощь, парни

...