10

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>
4

3 に答える 3

6

ビューは次のようになります。

<%@ 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)

理想的には、ビューがそれ自体を表示するために必要なすべてのプロパティ、パラメータ、またはデータは、モデルの一部である必要があります。

お役に立てば幸いです。

于 2010-02-04T12:16:37.900 に答える
3

別のアプローチは、Restful URLを使用して、適切なコントローラーアクションとビューを呼び出すことです。

これにより、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}
于 2010-02-04T12:56:12.463 に答える
0

Paulの方法は優れていますが、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>"
于 2010-02-04T13:11:27.370 に答える