ビューバッグを使用して顧客のリストを強く型付けされたビューに戻そうとしていますが、MVC と Razor を初めて使用するため、いくつかの問題があります。次の問題について誰か親切にアドバイスをいただけますか?
コントローラーに次のコードがあります。
public ViewResult Index()
{
var q = from a in db.Customers
select a;
ViewBag.customer = q;
return View(db.CustomerSites.ToList());
}
そして私の見解ではこのコード
@foreach (var customer in Model)
{
<tr>
<td>
@ViewBag.customer.CustomerName
<td>
<td>
@customer.UnitNo
</td>
<td>
@Truncate(customer.StreetName, 25)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=customer.Id }) |
@Html.ActionLink("Details", "Details", new { id=customer.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=customer.Id })
</td>
</tr>
}
顧客と顧客サイトのリストを取得しています。サイトはビューに入力されています。
@model IEnumerable<trsDatabase.Models.CustomerSite>
を使用して顧客のリストから CustomerName を抽出しようとしています
@ViewBag.customer.CustomerName
しかし、これは「顧客」タイプに顧客名の定義が含まれていないというエラーを生成していますが、以下に示すようにエラーが発生している理由がわかりません。
namespace trsDatabase.Models
{
public class Customer
{
[ScaffoldColumn(false)]
public int Id { get; set; }
[StringLength(50), Required(ErrorMessage = "Customer name required, please enter a customer name")]
public string CustomerName { get; set; }
[DisplayName("Contact Name")]
[StringLength(50), Required(ErrorMessage = "Primary contact name required, please enter a contact name")]
public string PrimaryContactName { get; set; }
[DisplayName("Secondary Contact")]
public string SecondaryContactName { get; set; }
[DisplayName("Email")]
[StringLength(50), Required(ErrorMessage = "Primary email address is required please enter an email address")]
public string PrimaryEmailAddress { get; set; }
[DisplayName("Secondary Email")]
public string SecondaryEmailAddress { get; set; }
[ScaffoldColumn(false)]
public DateTime RegisteredDate { get; set; }
[DisplayName("Contact No")]
public string PrimaryContactNo { get; set; }
[DisplayName("Secondary Contact No")]
public string SecondaryContactNo { get; set; }
[DisplayName("Waste Carrier Ref")]
public string WasteCarrierRef { get; set; }
[DisplayName("Unit No")]
public string UnitNo { get; set; }
[DisplayName("Street Name")]
[StringLength(50), Required(ErrorMessage = "Street name required, please enter a street name ")]
public string StreetName { get; set; }
[StringLength(50), Required(ErrorMessage = "Town required, please enter a town")]
public string Town { get; set; }
[StringLength(50), Required(ErrorMessage = "County is required, please enter a county")]
public string County { get; set; }
[StringLength(10), Required(ErrorMessage = "Postcode is required, please enter a postcode")]
public string Postcode { get; set; }
public List<CustomerSite> CustomerSites { get; set; }
}
}
アップデート:
これで必要なことを実行することはまだできません。次を含むマスタービューモデルを作成しました
public IEnumerable <Customer> SomeCustomer { get; set; }
public IEnumerable <CustomerSite> CustomerSites { get; set; }
それから私の見解では、
@model IEnumerable<trsDatabase.Models.masterViewModel>
for each を使用して入力してモデルにアクセスしようとすると、
@foreach (var customer in Model)
@customer と入力すると。リスト内の個々のプロパティではなく、2 つのリストにのみアクセスできます。
たとえば、@customer.CustomerSites.UnitNoでこれを行うことができたと思いました
しかし、私ができる限りのことは @customer.CustomerSites です。
ここで私が間違っていることについて何か考えはありますか?