如何将更新的对象作为参数传递给UpdateMethod

时间:2014-07-30 08:49:30

标签: c# asp.net entity-framework detailsview

我有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")无效。有没有其他方法如何访问和绑定通过外键包含的所有字段?

0 个答案:

没有答案