コントローラは、ビューを通過するとき、私は次のエラーを取得しています:ASP.NET MVCビューリスト<MyViewModel>エラー
エラー:
'List<GrantsViewModel>' does not contain a definition for 'StateName' and no extension method 'StateName' accepting a first argument of type 'List<GrantsViewModel>' could be found (are you missing a using directive or an assembly reference?)
モデル:
public class StateName
{
[Key]
public int StateId { get; set; }
public string State { get; set; }
public string StateNumber { get; set; }
}
public class AnnualGrant
{
[Key]
public int GrantNo_Id { get; set; }
public string StateNumber { get; set; }
public int FiscalYear { get; set; }
public string GrantNo { get; set; }
}
public class MyProjectContext : DbContext
{
public MyProjectContext (DbContextOptions<MyProjectContext> options) : base(options)
{ }
public DbSet<StateName> StateNames { get; set; }
public DbSet<AnnualGrant> AnnualGrants { get; set; }
}
のViewModel:
public class GrantsViewModel
{
public int GrantNo_Id { get; set; }
public string StateNumber { get; set; }
public string StateName { get; set; }
public string GrantNo { get; set; }
public int FiscalYear { get; set; }
}
コントローラー:
public class DbTestController : Controller
{
private MyProjContext _context;
public DbTestController(MyProjContext context)
{
_context = context;
}
public IActionResult GrantNumbers()
{
var qryVM = from s in _context.StateNames
join g in _context.AnnualGrants on s.StateNumber equals g.StateNumber into sg
from r in sg.DefaultIfEmpty()
select new GrantsViewModel() { StateNumber = s.StateNumber,StateName= s.State, GrantNo= (r == null ? String.Empty : r.GrantNo), FiscalYear = (r == null ? 1900 : r.FiscalYear) };
return View(qryVM.ToList());
}
}
ビュー:注:
@model List<MyProjet.Models.GrantsViewModel>
<form asp-controller="DbTest" asp-action="GrantNumbers" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post">
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.StateName)
</th>
<th>
@Html.DisplayNameFor(model => model.GrantNo)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<input asp-for="StateName" />
</td>
<td>
@Html.DisplayFor(modelItem => item.GrantNo)
</td>
<td></td>
</tr>
}
</tbody>
</table>
<button type="submit" class="btn btn-default">Save</button>
</form>
そして@ Html.DisplayNameFor(モデルであれば、それはあなたのビューが強く
IEnumerable<T>
に型付けされている場合にのみ、それは動作しません動作します覚えておいてください変更=> model.First()。GrantNo):) –モデルリストが空であれば例外をスローすることはありませんか? – serhiyb
@serhiyb:直観的にはそういう感じですが、フレームワークは実際にはクエリを実行しません。これはコレクションに反復するのではなく、型に反映するためのものです。 – David