В ASP.NET MVC я хотел бы представить другое частичное представление в зависимости от renderview параметра строки запроса.
Поэтому предоставляя услугу для пользователя, чтобы принять решение просмотреть продукты миниатюрой или деталями.
У меня есть доступ к выбранному параметру в контроллере, но я не знаю, как к или, если я должен передавать это представлению наряду со списком продуктов, таким образом, представление может реализовать логику для решения который частичное представление отобразиться?
public ActionResult Products(string id, int? renderview)
{
var products = productRepository.GetProducts(id).ToList();
return View("Products", products);
}
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MLBWebRole.Models.Product>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Products
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Products</h2>
<p>This is the Products page</p>
<p><a href="?renderview=0">thumbnails</a> <a href="?renderview=1">details</a></p>
<% if (renderview == 1)
{%>
<% Html.RenderPartial("ProductsDetailList"); %>
<% }
else
{ %>
<% Html.RenderPartial("ProductsThumbnailList"); %>
<% } %>
</asp:Content>
Ваше представление должно быть примерно таким:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Models.MyModel>" %>
Затем в MyModel
Expose Property:
public bool RenderDetailView {get;set;}
В действии вашего контроллера:
public ActionResult Products(string id, int? renderview)
{
var products = productRepository.GetProducts(id).ToList();
return View("Products", new MyModel {RenderDetailView = renderview.HasValue});
}
Затем в вашем представлении сделайте проверку, например:
<% if (Model.RenderDetailView)
В идеале, все свойства или параметры или данные, которые необходимы View для того, чтобы представить себя, должны быть частью модели.
Надеюсь, это поможет.
Альтернативный подход - использовать Restful Urls для вызова соответствующего действия контроллера и просмотра.
Это заставляет URL-адреса отражать то, что вы видите на экране, и делает дизайн более расширяемым; если вам понадобится добавить другие представления данных в будущем (сводные, последние и т. д.), вы добавляете новое представление, нет необходимости в частичных представлениях, если только основная часть представления не станет более сложной и должна быть перенесена в частичное представление .
URL-адреса будут выглядеть так:
~/product/1/detail
~/product/1/thumbnail
И соответствовать методам ProductController:
public ActionResult Detail(String id)
{
var products = productRepository.GetProducts(id).ToList();
return View("Detail", products);
}
public ActionResult Thumbnail(string id)
{
var products = productRepository.GetProducts(id).ToList();
return View("Thumbnail", products);
}
Вы включаете маршрутизацию с таким маршрутом, как:
{controller}/{id}/{action}
Метод Пауля хорош, но если вы решили, что хотите передать int, вам нужно создать модель представления.
В вашем контроллере добавьте это
public class ProductsFormViewModel
{
// Properties
public Products Products { get; private set; }
public int? Renderview { get; private set; }
// Constructor
public ProductsFormViewModel(Products p_products, int? p_renderView)
{
Products = p_products;
Renderview = renderView;
}
}
Затем передайте это в представление
return View(new ProductsFormViewModel(products, renderview);
, а затем в представление
Inherits="System.Web.Mvc.ViewPage<YourNamespace.Controllers.ProductsFormViewModel>"