C# 如何从窗体中隐藏外键值
我的数据库中有一个名为Review的表,我使用Entity Framework制作了具有读/写操作和视图的ReviewController。所以这都是脚手架代码 这是我的编辑页面C# 如何从窗体中隐藏外键值,c#,.net,asp.net-mvc-3,entity-framework,foreign-keys,C#,.net,Asp.net Mvc 3,Entity Framework,Foreign Keys,我的数据库中有一个名为Review的表,我使用Entity Framework制作了具有读/写操作和视图的ReviewController。所以这都是脚手架代码 这是我的编辑页面 @model UniversityApp.Models.Review @{ ViewBag.Title = "Edit"; } @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend&g
@model UniversityApp.Models.Review
@{
ViewBag.Title = "Edit";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Review</legend>
@Html.HiddenFor(model => model.ReviewID)
<div class="editor-label">
@Html.LabelFor(model => model.MovieID, "Movie")
</div>
<div class="editor-field">
@Html.DropDownList("MovieID", String.Empty)
@Html.ValidationMessageFor(model => model.MovieID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.UserID, "User")
</div>
<div class="editor-field">
@Html.DropDownList("UserID", String.Empty)
@Html.ValidationMessageFor(model => model.UserID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Rating)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Rating)
@Html.ValidationMessageFor(model => model.Rating)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Description)
@Html.ValidationMessageFor(model => model.Description)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
编辑:
我已经尝试了所描述的方法,但仍然有问题。现在我得到的错误消息是:
发生引用完整性约束冲突:定义引用约束的属性值在关系中的主体对象和从属对象之间不一致。我不知道我做错了什么。这一行代码触发了错误:
db.Entry(review).State = EntityState.Modified;
在ViewModels中使用此注释注释属性,以避免模板在视图中自动生成列
[ScaffoldColumn(false)]
public int ReviewID;
在ViewModels中使用此注释注释属性,以避免模板在视图中自动生成列
[ScaffoldColumn(false)]
public int ReviewID;
除了cd smith非常好的建议外,如果您不想以这种方式装饰viewmodel,还可以添加一个隐藏字段,如下所示:
@Html.HiddenFor(x => x.Review_UserID)
etc,etc,用于您希望在表单上显示但不可见的每个FK。当然,这与装饰器的工作原理类似,通过添加
[HiddenInput(DisplayValue=false)]
属性可以明确地为您实现这一点。除了cd smith非常好的建议之外,如果您不想以这种方式装饰viewmodel,还可以添加一个隐藏字段,这看起来像:
@Html.HiddenFor(x => x.Review_UserID)
etc,etc,用于您希望在表单上显示但不可见的每个FK。当然,这与
[ScaffoldColumn(false)]
装饰器的工作原理类似,当然,通过添加[HiddenInput(DisplayValue=false)]
属性可以明确地为您实现这一点。他实际上有那个隐藏字段,我得到的印象是他也不想在源代码中包含它。。。但是谢谢你!我比你高!哦,是的,我也看到了。好的,也许[HiddenInput(DisplayValue=false)]
或者[ScaffoldColumn(false)]
可以为他工作。我同意,我不知道[HiddenInput(DisplayValue=false)]
属性,谢谢,我会记得他实际上有一个隐藏字段,我得到的印象是他也不想在源代码中有它。。。但是谢谢你!我比你高!哦,是的,我也看到了。好的,也许[HiddenInput(DisplayValue=false)]
或者[ScaffoldColumn(false)]
可以为他工作。我同意,我不知道[HiddenInput(DisplayValue=false)]
属性,谢谢。我会记住,如果我们的解决方案帮助您解决了这是一个新问题,请告诉我们,如果我们的解决方案帮助您解决了这是一个新问题,您会想开始一个关于新错误的细节的新问题让我们知道我们的解决方案是否帮助您解决了这是一个新问题,您需要开始一个关于新错误细节的新问题