Entwicklung in: ASP.net Web Forms 4.5Wie funktioniert TryUpdateModel in asp.net?
ich derzeit hier das DynamicDataTemplateCS Nuget Paket wie im Tutorial mit: https://docs.microsoft.com/en-us/aspnet/web-forms/overview/presenting-and-managing-data/model-binding/updating-deleting-and-creating-data
Es ermöglicht die automatische Erzeugung updatemethod und deletemethods, wie ich sie verwenden und hatte kein Problem. Aber jetzt habe ich meine Daten ein wenig geändert, um die Informationen nicht aus der Tabelle auf ItemTemplate Feld von Gridview anzuzeigen.
Ich schaute auf den Code und in Print-Anweisungen und es scheint in TryUpdateModel-Methode gehen und gibt True, aber es aktualisiert die Datenbank nicht.
Der Code ist wie folgt aus: auf Ansicht:
<asp:GridView runat="server" ID="aGrid" CellPadding="10"
DataKeyNames="idx" AutoGenerateColumns="false"
selectMethod="aGrid_GetData" ItemType="model"
updateMethod="aGrid_UpdateItem" AutoGenerateEditButton="true"
deleteMethod="aGrid_DeleteItem" AutoGenerateDeleteButton="true"
onRowDataBound="aGrid_RowDataBound">
<Columns>
<asp:DynamicField DataField="poNum" />
<asp:BoundField DataField="a" HeaderText="a"/>
<asp:DynamicField DataField="someDate" DataFormatString="{0:d}" />
<asp:BoundField HeaderText="b" />
<asp:HyperLinkField HeaderText="c" NavigateUrl="~/yes?no={0}" />
<asp:DynamicField DataField="e" />
<asp:DynamicField DataField="f" />
<asp:DynamicField DataField="g" DataformatString="{0:d}"/>
<asp:DynamicField DataField="h" />
</Columns>
</asp:GridView>
Backend:
public void aGrid_UpdateItem(int idx)
{
using (Context db = new Context())
{
model item = null;
item = db.model.Find(idx);
System.Diagnostics.Debug.WriteLine("updatemethod started");
if (item == null)
{
// The item wasn't found
System.Diagnostics.Debug.WriteLine("item is null");
ModelState.AddModelError("", String.Format("Item with id {0} was not found", idx));
return;
}
System.Diagnostics.Debug.WriteLine("trying to update model");
System.Diagnostics.Debug.WriteLine(TryUpdateModel(item));
//TryUpdateModel(item);
if (ModelState.IsValid)
{
System.Diagnostics.Debug.WriteLine("before saving changes");
db.SaveChanges();
System.Diagnostics.Debug.WriteLine("after saving changes");
// Save changes here, e.g. MyDataLayer.SaveChanges();
}
else
{
System.Diagnostics.Debug.WriteLine("ModelState not valid!!");
}
}
}
ich kann nicht herausfinden, warum dies nicht aktualisiert .. Ich bezweifle, dass die beiden Boundfields "b" und "c", weil ihre Daten tatsächlich nicht aus dem Modell sind. Ich habe sie draußen gebunden. Trotzdem wäre es gut zu wissen, wie das TryUpdateModel funktioniert, damit ich herausfinden kann, warum das nicht funktioniert.
Übrigens ist dies der Code, den ich "b" und "c" -Feld gebunden habe. Als ich sie in der Ansicht auskommentierte, funktionierte das Update so, dass sie schuldig sind, dass TryUpdateModel nicht funktioniert.
protected void aGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
using (thisAction ta = new thisAction())
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string str = e.Row.Cells[2].Text;
if (str.Length > 0)
{
string str2 = soa.get_str2(str);
e.Row.Cells[4].Text = str2;
string str3 = soa.get_str3(str);
e.Row.Cells[5].Text = str3;
}
}
}
}
PS: Ich für die Namensgebung entschuldigen .. es hat einige sensible Daten, damit ich sie
Es funktioniert wirklich, wenn ich diese zwei Felder verberge. "b" und "c" jetzt sind die Felder tatsächlich schuldig. –