我的模特课是:
public class Contracts
{
public int ContractId { get; set; }
public string contract { get; set; }
}
添加其控制器:
public ActionResult Index()
{
var contracts = from c in db.Contracts
select c;
return View(contracts.ToList());
}
强类型视图返回:
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
<td>
@item.ContractId
</td>
<td>
@item.contract
</td>
</tr>
}
最初,基表的主键称为 ID 。然后我将其更改为 ContractId 以便在外键中使用。
如何设置模型主键以便视图识别它?
UPDATE1 :我正在使用EntityFramework 4
UPDATE2 :Brian提供的答案可以手动正确分配密钥。要解决我的问题,需要将表重命名为'合同'来自'合同'。我还将该表中的“合同”字段重命名为“名称”。然后我删除了'Contracts'模型类并将其重新创建为'Contract'。 VIEW文件夹已重命名为Contract。我的猜测是命名约定打破了主键的代码识别。
答案 0 :(得分:3)
假设您在控制器上的操作方法是这样的:
public ActionResult Details(int id){
// retrieve contract and generate view
}
public ActionResult Edit(int id){
// retrive contract and generate view
}
public ActionResult Delete(int id){
// delete contract
}
然后你的观点应该是这样的:
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ContractId }) |
@Html.ActionLink("Details", "Details", new { id=item.ContractId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ContractId })
</td>
<td>@item.ContractId</td>
<td>@item.contract</td>
</tr>
}