ASP.NET MVC группировка / повторное использование функциональности представления - PullRequest
0 голосов
/ 15 сентября 2009

На данной странице, скажем, для отображения окна, мне может потребоваться некоторая инициализация JavaScript, некоторые DIV с определенными идентификаторами, и все они должны быть связаны друг с другом. JavaScript, возможно, должен знать об идентификаторе DIV, DIV, возможно, должен быть вложен определенным образом и так далее. Очевидно, я не хочу беспокоиться об этом на каждой странице, где я использую этот код. Это сделало бы его подверженным ошибкам, а не СУХИМ.

С помощью WebForms я бы решил эту проблему, написав собственный элемент управления. Как вы, ребята, делаете это в своих проектах? Используете ли вы методы расширения, выплевывающие строки, может быть, пользовательские элементы управления? Какой рекомендуемый способ?

Спасибо.

EDIT

Вот пример использования мастер-страниц:

  1. В области содержимого HEAD мне понадобится код jQuery, который настраивает некоторые функции
  2. В одну область контента я бы поместил HTML, необходимый для отображения части окна
  3. В другой области содержимого я бы поместил фактический HTML, отображаемый в окне.

Таким образом, для всех этих 3 частей потребуется 3 разных блока кода, но они будут логически связаны.

РЕДАКТИРОВАТЬ 2

Пример кода (с использованием главной страницы)

<asp:Content ContentPlaceHolderID="HeaderContent" runat="server">
   <script type="text/javascript">
     $(document).ready(function() { DoSomething('div1', 'div2'); });
   </script>
</asp:Content>

<asp:Content ContentPlaceHolderID="TopContent" runat="server">
  <div id='div1'> ... </div>
</asp:Content>

<asp:Content ContentPlaceHolderID="BottomContent" runat="server">
  <div id='div2'> ... </div>
</asp:Content>

div1 и div2 связаны с вызовом функции JavaScript. Если я сделаю ошибку, дайте DIV другой идентификатор, код будет поврежден. Это простой пример, который доказывает это. Это становится намного сложнее, когда связывание основывается на div1, имеющем определенную структуру, например.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

Можете ли вы использовать Site.Master для этой цели или хотя бы другого Мастера своего собственного создания? Все ваши представления могут затем ссылаться на этого мастера и получать выгоду от инициализированного JavaScript и элементов макета.

Для меня это имеет смысл, если контент статичен по своей природе. Если нет, я бы использовал собственный вспомогательный метод Html.Init.

Я предполагаю что-то вроде следующего:

global.js

function doSomething()
{
}

//more code here

главная страница

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<!DOCTYPE html PUBLIC 
 "-//W3C//DTD XHTML 1.0 Strict//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>
      <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
    </title>
    <link rel="Stylesheet" href="~/Content/styles.css" />
    <script type="text/javascript" src="global.js"></script>
</head>
<body>
    <div id="customContent">
    </div>
    <div id="content">
        <asp:ContentPlaceHolder ID="MainContent" runat="server" />
    </div>    
</body>
</html>
1 голос
/ 15 сентября 2009

Ближайшие к CustomControlls вы можете получить Partials. Они не такие мощные, как CustomControlls, потому что у них нет обработки событий (очевидно), но это хороший способ отделить общий HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...