GridView / model绑定UpdateMethod未被调用
本文关键字:调用 UpdateMethod 绑定 model GridView | 更新日期: 2023-09-27 18:14:48
我有一个基本的Web表单项目使用实体框架&SQL Server用于数据。我试图将GridView连接到一个表,由于某种原因,UpdateMethod没有被调用。当点击"更新"链接时,它会回发,但它永远不会到达gvNames_UpdateItem。如有任何帮助,我将不胜感激。
<asp:GridView ID="gvNames" runat="server" SelectMethod="gvNames_GetData" UpdateMethod="gvNames_UpdateItem"
DeleteMethod="gvNames_DeleteItem" CssClass="table table-hover table-striped"
UseAccessibleHeader="true" ItemType="CountyPMFraudData.NotifyName" AutoGenerateColumns="false" DataKeyNames="NotifyNamesID"
ShowHeaderWhenEmpty="true" OnPreRender="gvNames_PreRender" >
<Columns>
<asp:DynamicField DataField="NotifyNamesID" Visible="false" />
<asp:DynamicField DataField="UserID" Visible="false" />
<asp:DynamicField DataField="CorpFlag" HeaderText="Business" />
<asp:DynamicField DataField="FirstName" />
<asp:DynamicField DataField="LastName" HeaderText="Last Name/Business Name" />
<asp:DynamicField DataField="Active" HeaderText="Active" />
<asp:CommandField ShowEditButton="true" ShowCancelButton="true" ShowDeleteButton="true"/>
</Columns>
</asp:GridView>
后面的代码是:
public void gvNames_DeleteItem(int notifyNamesID)
{
using (var dbContext = new CountyPMFraudEntities())
{
var item = new NotifyName { NotifyNamesID = notifyNamesID };
dbContext.Entry(item).State = EntityState.Deleted;
try
{
dbContext.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
ValidationError.Display(String.Format("Item with id {0} no longer exists in the database.", notifyNamesID));
}
}
}
public IEnumerable gvNames_GetData()
{
List<NotifyName> names = null;
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
using (var dbContext = new CountyPMFraudEntities())
{
names = dbContext.NotifyNames.Where(NotifyName => NotifyName.UserID == _userID).ToList();
}
}
return names;
}
public void gvNames_UpdateItem(int notifyNamesID)
{
using (var dbContext = new CountyPMFraudEntities())
{
var name = dbContext.NotifyNames.Find(notifyNamesID);
if (name == null)
{
ValidationError.Display(String.Format("Item with id {0} was not found", notifyNamesID));
return;
}
TryUpdateModel(name);
if (ModelState.IsValid)
{
dbContext.SaveChanges();
}
}
}
protected void gvNames_PreRender(object sender, EventArgs e)
{
try
{
gvNames.HeaderRow.TableSection = TableRowSection.TableHeader;
}
catch (Exception)
{
//Just ignore becuase there is no data.
}
}
好了,我明白了。当时发生了两件事。首先,我错过了添加"ValidationSummary"和启用ShowModelStateErrors,如下所示:
<asp:ValidationSummary ID="vsHuman" ShowModelStateErrors="true" ValidationGroup="vgHuman" runat="server" ForeColor="Red" />
一旦我这样做了,然后我意识到我得到了一个错误"NotifyNamesID字段是必需的。"这样,我发现隐藏的"DynamicField"在返回服务器时不包含数据,所以我不得不将其更改为TemplateField,如下所示:
<asp:TemplateField Visible="false">
<ItemTemplate>
<asp:HiddenField runat="server" Value='<%#Eval("NotifyNamesID") %>' />
</ItemTemplate>
</asp:TemplateField>
一旦我这样做了,事情就开始起作用了。