8

私は ASP.NET MVC 3 を学習しており、外部キーによってリンクされた複数のモデルで構成される単一のフォームでビューを作成しようとしています。最終的な目標は、単一のフォームをすべてのデータベース テーブルに挿入することです。

問題は、右クリックしてフォームが cshtml ファイルで自動生成されないビューを作成する理由がわからないことです。自動生成されたコードは、相互にリンクする多くのテーブルと、検証して挿入する必要がある多くのフィールドがあるため、非常に役立ちます。フォームを自動生成できない場合、これを行うための最も効率的/エレガントな方法は何ですか?

これが私が持っているものの単純化です。

モデル:

class Customer
{
    [Key]
    public UInt64 CustomerId { get; set; }

    [Required(ErrorMessage = "Name is required.")]
    [Display(Name = "Customer Name")]
    [MaxLength(50)]
    public string FullName { get; set; }
}

class CustomerAdditionalDetails1
{
    [ForeignKey("Customer")]
    public UInt64 CustomerId { get; set; }

    [Required(ErrorMessage = "This info is required.")]
    [Display(Name = "Customer Information")]
    [MaxLength(50)]
    public string SomeInfo { get; set; }
}

class CustomerAdditionalDetails2
{  // same foreign key as CustomerAddtionalDetails1, but with different properties
}

class CustomerAdditionalDetails3
{  // same foreign key as CustomerAddtionalDetails1, but with different properties
}

...

public class CustomerModel
{
    public Customer Customer { get; set; }
    public CustomerAdditionalDetails1 CustomerAdditionalDetails1 { get; set; }
    public CustomerAdditionalDetails2 CustomerAdditionalDetails2 { get; set; }
    public CustomerAdditionalDetails3 CustomerAdditionalDetails3 { get; set; }
    ...
}

コントローラ:

public ActionResult Submit()
{
    return View();
}

[HttpPost]
public ActionResult Submit(CustomerModel customer)
{
    return View();
}

助けてください!

4

1 に答える 1

7

ビューを生成するとき、CustomerModel に基づいて厳密に型指定されたビューを作成していますか? その後、ビューを生成する場合、すべてのプロパティが他のオブジェクトへの参照であるため、ページに値が出力されません。スキャフォールディングがビューにそれらを自動的に含めるには、モデルに含まれる実際の値の型が必要です。つまり、以下の例のように、いつでも自分でビューに追加できます。

また、コントローラーで、GET メソッドがモデルをビューに返してレンダリングしていないことに気付きました。モデルに基づいてビューを生成したい場合は、生成したいオブジェクトを渡す必要があります。

@model MvcApplication3.Models.CustomerModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<fieldset>
    <legend>CustomerModel</legend>
</fieldset>
<ul>
<li>@Model.Customer.FullName</li>
<li>@Model.CustomerAdditionalDetails1.SomeInfo1</li>
<li>@Model.CustomerAdditionalDetails2.SomeInfo2</li>
</ul>
<p>
    @Html.ActionLink("Edit", "Edit", new { /* id=Model.PrimaryKey */ }) |
    @Html.ActionLink("Back to List", "Index")
</p>


public class CustomerController : Controller
    {
        public ActionResult Index()
        {
            CustomerModel customerModel = new CustomerModel() 
            { 
                Customer = new Customer()
                {
                    FullName = "Dan"
                },
                CustomerAdditionalDetails1 = new CustomerAdditionalDetails1() 
                { 
                    SomeInfo1 = "Somewhere1" 
                },
                CustomerAdditionalDetails2 = new CustomerAdditionalDetails2()
                {
                    SomeInfo2 = "Somewhere2"
                },
                CustomerAdditionalDetails3 = new CustomerAdditionalDetails3()
                {
                    SomeInfo3 = "Somewhere3"
                }
            };

            return View(customerModel);
        }
    }
于 2011-05-22T10:50:00.280 に答える