ASP.NET MVC, Передающий несколько параметров представлению

В 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>
9
задан Nicholas Murray 4 February 2010 в 12:04
поделиться

3 ответа

Ваше представление должно быть примерно таким:

<%@ 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 для того, чтобы представить себя, должны быть частью модели.

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

6
ответ дан 4 December 2019 в 21:49
поделиться

Альтернативный подход - использовать 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}
3
ответ дан 4 December 2019 в 21:49
поделиться

Метод Пауля хорош, но если вы решили, что хотите передать 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>"
0
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: