簡體   English   中英

將現有但已修改的實體附加到上下文(數據庫中的下拉列表)

[英]Attaching an existing but modified entity to the context (Drop-down list from Database)

專家們,

下拉列表是從數據庫中選取數據,並在打開網頁並保存數據時針對同一列進行保存,其中保存是使用另一個名稱而不是相同名稱進行的,

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script> </head> <body> <form id="form1" runat="server"> <div class="form"> <p> <asp:Label ID="Label1" runat="server" Text="Place Name" AssociatedControlID="txtName"></asp:Label> <asp:DropDownList ID="txtName" runat="server" > </asp:DropDownList> </p> <p> <asp:Label ID="Label2" runat="server" Text="Address" AssociatedControlID="txtAddress"></asp:Label> <asp:TextBox ID="txtAddress" runat="server"></asp:TextBox> </p> <p> <asp:HiddenField ID="hdnLocation" runat="server" /> </p> <p> <asp:Button ID="btnSubmit" runat="server" Text="Save" OnClick="btnSubmit_Click" /> </p> <p id="message"></p> </div> </form> <script type="text/javascript"> if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition, showError); } else { $("#message").html("Geolocation is not supported by this browser."); } function showPosition(position) { var latlondata = position.coords.latitude + "," + position.coords.longitude; var latlon = "Latitude" + position.coords.latitude + "," + "Longitude" + position.coords.longitude; $("#message").html(latlon); $("[id*=hdnLocation]").val(position.coords.longitude + " " + position.coords.latitude); } function showError(error) { if (error.code == 1) { $("#message").html("User denied the request for Geolocation."); } else if (error.code == 2) { $("#message").html("Location information is unavailable."); } else if (error.code == 3) { $("#message").html("The request to get user location timed out."); } else { $("#message").html("An unknown error occurred."); } } </script> </body> </html> 

 using System; using System.Collections.Generic; using System.Data.Entity.Spatial; using System.Linq; using System.Web; using System.Web.UI; using System.Data.SqlClient; using System.Web.UI.WebControls; using System.Data; using System.Configuration; using System.Web.Security; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.Configuration; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { string query = "SELECT PlaceID, Name,Address FROM Placeinfo"; string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; using (SqlConnection con = new SqlConnection(constr)) { using (SqlCommand cmd = new SqlCommand(query)) { cmd.CommandType = CommandType.Text; cmd.Connection = con; con.Open(); using (SqlDataReader sdr = cmd.ExecuteReader()) { while (sdr.Read()) { ListItem item = new ListItem(); item.Text = sdr["Name"].ToString(); txtName.Items.Add(item); txtName.ClearSelection(); } } con.Close(); } } } } public List<PlaceInfo> GetMyPlaces() { return new SampleDBEntities().PlaceInfoes.ToList(); } protected void btnSubmit_Click(object sender, EventArgs e) { PlaceInfo placeToEdit = Context.placeinfoes.Find(Convert.ToInt32(txtName.DataValueField)); using (var context = new SampleDBEntities()) { PlaceInfo placeToUpdate = context.PlaceInfoes.Find(Convert.ToInt32(txtName.DataValueField)); placeToUpdate.Name = txtName.Text; placeToUpdate.Address = txtAddress.Text; placeToUpdate.Geolocation = DbGeography.FromText("POINT( " + hdnLocation.Value + ")"); context.Entry(placeToUpdate).State = System.Data.Entity.EntityState.Modified; context.SaveChanges(); } } } 

數據庫數據庫顯示

為了更新數據庫中的一項,我們首先需要確保我們知道我們需要引用哪一項。

首先,隨着您的DropDownList的創建,我們將要隱藏正在顯示的“ PlaceInfo”的ID。 這將需要“ SelectMethod”以及其他一些調整:

<asp:DropDownList ID="txtName" runat="server" ItemType="PlaceInfo" DataValueField="PlaceId" DataTextField="Name" SelectMethod="GetMyPlaces"></asp:DropDownList>

DataTextField屬性是將在實際的DropDown中顯示的屬性,而DataValueField是隱藏的屬性,我們將使用該屬性來引用ID,以便稍后可以調用該行。

SelectMethod(我的名字是:GetMyPlaces)是我們用來填充DropDownList的方法。 為簡便起見,請原諒,您可以通過多種方式進行此操作,但實際上您想返回一個PlaceInfos列表:

public List<PlaceInfo> GetMyPlaces()
{
    return new SampleDbEntities().PlaceInfoes.ToList();
}

最后-在btnSubmit_Click方法中,您想使用下拉菜單中的隱藏值字段來獲取我們要編輯的行:

PlaceInfo placeToEdit = Context.PlaceInfoes.Find(Convert.ToInt32(txtName.Value))

為它分配新值,並告知實體框架此模型現已修改:

using (var context = new SampleDBEntities())
{
       PlaceInfo placeToUpdate = context.PlaceInfoes.Find(Convert.ToInt32(txtName.Value));
       placeToUpdate.Name = txtName.Text;
       placeToUpdate.Address = txtAddress.Text;
       placeToUpdate.Geolocation = DbGeography.FromText("POINT( "+hdnLocation.Value+")");

       context.Entry(placeToUpdate).State = EntityState.Modified;
       context.SaveChanges();
}

將更改保存到您的上下文中,您應該會很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM