3

Address.ascxASP.NET MVC ページにコントロールの 2 つのインスタンスがあります。

   <h1>Shipping Address</h1>
   <% Html.RenderPartial("Controls/AddressControl"); %>

   <h1>Billing Address</h1>
   <% Html.RenderPartial("Controls/AddressControl"); %>

もちろん、このようなコードを使用すると、住所の各フィールドに同じ ID が割り当てられます。フィールドの ID に文字列を簡単に追加できるので、 と がありますが、'Street1_billing'これ'Street1_shipping'をモデルにマップする方法がわかりません。

モデルをアイテムの配列にマッピングするための最良の解決策は何ですか(この場合は2つだけ)。これに対する ASP.NET の「すぐに使える」ソリューションについては知りません。

注: これはこの質問と少し似ていますが、Scott Hanselman のこのソリューションを使用できますが、私が望むものとはまったく異なります。私の場合、2 つのアイテムがあることがわかっているので、基本的には 2 アイテムの配列ですが、もう少しエレガントなソリューションがあるかどうか疑問に思っています。

PS。これは以前に何度も尋ねられたと思いますが、正しい検索用語を入力できないようです. だまされていることに気付いている場合は、この質問をリンクしてください。

4

2 に答える 2

4

まず、モデルにAddressクラスを追加します。

public class Address
{
    String StreetAddress1 { get; set }
    String StreetAddress2 { get; set }
    String City { get; set }
    String State { get; set }
    String Zip { get; set }
}


Address.ascx では、次のように Address モデルを継承する行が上部に必要です。

<%@ Page Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<MyProject.Models.Address>" %>


メイン ビュー のコントローラーで、 2 つのアドレスを ViewData にプッシュします。

Address myAddressObject1 = new Address
{
   AddressLine1 = "123 Anywhere Street",
   // ..etc.  Same with MyAddressObject2.  Or, just populate from database.
}

ViewData["Address1"] = myAddressObject1;
ViewData["Address2"] = myAddressObject2;
//
// do other stuff as needed
//
Return View();


メイン ビューで、次のように 2 つの Address サブビューを呼び出します 。

<%= Html.RenderPartial("Address", ViewData["Address1"]) %>
<%= Html.RenderPartial("Address", ViewData["Address2"]) %>
于 2009-07-10T04:46:32.500 に答える