我有DetailsView
,我绑定了Mas
类型的单个数据库记录。 SelectMethod按ID获取对象,我可以访问如下数据:
<asp:DetailsView ID="masDetailView" runat="server" AutoGenerateRows="False"
SelectMethod="GetMas" UpdateMethod="UpdateMas" ItemType="NSMAS.DAL.Mas"
AutoGenerateEditButton="True" OnDataBound="MasDetailViewOnDataBound">
<Fields>
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" ID="nameLbl0" Text="Název: "></asp:Label>
<asp:Label runat="server" ID="nameLbl" Text='<%#: Item.MasName %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="nameEdit" runat="server" Text='<%# Item.MasName %>'></asp:TextBox>
</EditItemTemplate
</asp:TemplateField>
<%--other fields--%>
当我点击自动生成的按钮进行编辑时,ItemTemplate
会被EditItemTemplate
替换,因此我可以编辑每一列。现在当我点击“更新”按钮时,我通过获取每个TextBox
的字符串值来访问更新的字段。
我现在想要的是使用更新的字段获取Mas
的对象,以便我可以在代码隐藏中执行类似的操作:
public void UpdateMas(Mas newMas)
{
using (var ctx = new NSMASEntities())
{
//newMas = get the object with updated field here or pass it like parameter (now, newMas=null)
Mas oldMas = ctx.Mas.Find(int.Parse(_masId));
oldMas.MasName = newMas.MasName;
//other columns
ctx.SaveChanges();
}
}
访问更新对象的方法是什么,以便我可以简单地更新旧对象?
修改
我已经发现,如果我将'<%#: Item.MasName %>'
替换为'<%#: Bind("MasName") %>'
,并将UpdateMethod中的代码隐藏替换为:
Mas mas = ctx.Mas.Find(int.Parse(_masId));
TryUpdateModel(mas);
ctx.SaveChanges();
但是在Bind("param")
中,param不能从另一个表f.e记录。 Bind("Region.RegionName")
无效。有没有其他方法如何访问和绑定通过外键包含的所有字段?