- Тебе не нужно это делать, как идея сложных типов. Вы можете включить мини-представления в полноценный вид для разделения повторений.
- Вы можете использовать Html.ActionLink для создания ссылок на страницы, и вы можете использовать Html.RenderPartial или Html.RenderAction для рендеринга целого действия на вашей странице.
- Точно. Как я уже говорил, вы можете разбить повторение на маленькие компоненты и включать их, когда захотите.
Например ...
Я работаю над небольшим приложением для магазина для друга и обнаружил, что создаю представление для добавления и редактирования продукта. Проблема в том, что я использовал ту же раскладку для полей. Поэтому я создал пользовательский элемент управления MVC, опустил поля и сделал что-то вроде этого.
Для добавления ..
<asp:Content ID="DefaultContent" ContentPlaceHolderID="DefaultContentPlaceHolder" runat="server">
<% Html.BeginForm<CatalogController>(c => c.AddProduct(null), FormMethod.Post); %>
<% Html.RenderPartial("ProductFields", ViewData); %>
<%= Html.SubmitButton("Submit", "Add") %>
<% Html.EndForm(); %>
</asp:Content>
А для редактирования ...
<asp:Content ID="DefaultContent" ContentPlaceHolderID="DefaultContentPlaceHolder" runat="server">
<% Html.BeginForm<CatalogController>(c => c.EditProduct((Product)null), FormMethod.Post); %>
<% Html.RenderPartial("ProductFields", ViewData); %>
<%= Html.Hidden("Product.ID", ViewData.Model.ID) %>
<%= Html.SubmitButton("Submit", "Save") %>
<% Html.EndForm(); %>
</asp:Content>
И часть ProductFields выглядела так
<% Product product = ViewData.Model; %>
<% IEnumerable<Category> categories = ViewData["Categories"] as IEnumerable<Category>; %>
<table>
<tr>
<td><%= Html.Label("Product.Name", "Name") %></td>
<td><%= Html.TextBox("Product.Name", product.Name) %></td>
</tr>
<tr>
<td><%= Html.Label("Product.Price", "Price") %></td>
<td><%= Html.TextBox("Product.Price", product.Price) %></td>
</tr>
<tr>
<td><%= Html.Label("Product.Description", "Description") %></td>
<td><%= Html.TextBox("Product.Description", product.Description) %></td>
</tr>
<tr>
<td><%= Html.Label("Product.IsActive", "Is active") %></td>
<td><%= Html.CheckBox("Product.IsActive", product.IsActive) %></td>
</tr>
<tr>
<td><%= Html.Label("Product.IsFeatured", "Is featured") %></td>
<td><%= Html.CheckBox("Product.IsFeatured", product.IsFeatured.HasValue ? product.IsFeatured.Value : false) %></td>
</tr>
<tr>
<td><%= Html.Label("Product.CategoryID", "Category") %></td>
<td><%= Html.DropDownList("Product.CategoryID", new SelectList(categories, "ID", "Name")) %></td>
</tr>
</table>
Итак, как вы можете видеть, вы можете легко разбивать ваши страницы по мере необходимости, включать их и очень легко передавать данные в них с помощью ASP.NET MVC.