ASP.Net MVC передача нескольких параметров в представление

In 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>&nbsp;<a href="?renderview=1">details</a></p>


 <% if (renderview == 1)
     {%>
    <% Html.RenderPartial("ProductsDetailList"); %>
<% }
else
 { %>
<% Html.RenderPartial("ProductsThumbnailList"); %> 
  <% } %>

</asp:Content>

3 ответов


ваш взгляд должен быть чем-то вроде:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Models.MyModel>" %>

тогда в MyModel

Подвергнуть Имущество:

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)

В идеале все свойства, параметры или данные, необходимые представлению для представления, должны быть частью модели.

надеюсь, это поможет.


альтернативным подходом было бы использовать URL-адреса Restful для вызова соответствующего действия контроллера и представления.

это делает 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>"