【问题标题】:Value from select tag html won't get added to database选择标签 html 中的值不会添加到数据库中
【发布时间】:2021-03-10 04:04:18
【问题描述】:

我试图在 aspnet Razor 页面中创建一个预订页面。我无法将值从 html 添加到 postgresql 数据库。当我从选择标签中选择一个选项并单击提交时,Locationid 和 Roomid 不会被添加。值只是保持 0,我不知道为什么。电子邮件和 Dayid 等其他输入标签确实有效,但它们确实被添加到数据库中。 谁能告诉我怎么了? 这是html代码:

<form action="" method="post">
                        <fieldset>
                            <tr>
                                <td>Email</td>
                                    <div class="form-group">
                                        <input id="txtEmail" name="Email" class="form-control" type="email">
                                    </div>

                                <td>Date</td>
                                
                                    <div class="form-group">
                                        <div class='input-group date' id='datetimepicker1' name="Dayid">
                                            <input type='date' class="form-control" name="Dayid" />
                                            <span class="input-group-addon">
                                                <span class="glyphicon glyphicon-calendar"></span>
                                            </span>
                                        </div>
                                    </div>
                                <td>Select location</td>
                                    <div class="form-group">
                                        <select id="locations" name="Locationid">
                                            @foreach(var reservations in @Model.PopulateReservations())
                                            {                                        
                                                <option value="0">@Html.DisplayFor(m => reservations.LocationName)</option>
                                            }
                                        </select>                                       
                                    </div>
                                <td>Select Room</td>
                                    <div class="form-group">
                                        <select id="rooms" name="Roomid">
                                            @foreach(var reservations in @Model.ShowRoom())
                                            {
                                               <option value="0">@Html.DisplayFor(m => reservations.RoomName)</option>
                                                 
                                            }
                                        </select>                                       
                                    </div>

                                    <div class="form group">
                                        <button type="submit" value="Submit" asp-page-handler="Submit" class="btn btn-dark btn-lg"> Submit</button>
                                    </div>
                            </tr>
                        </fieldset>
                        @Model.Info
                    </form>

这里是 html 页面的 c# 端:

namespace Project_Corona.Pages
{
    public class EmployeepageModel : PageModel
    {
        private readonly ILogger<EmployeepageModel> _logger;
        
        public EmployeepageModel(ILogger<EmployeepageModel> logger)
        {
            _logger = logger;
        }

        public string Info { get; set; }

        public void OnGet()
        {
            
        
        }
        public void  OnPostSubmit(ReservationModel reservation)
        {
            this.Info = string.Format("Reservation successfully saved");

            CreateReservation(reservation.Reservationid, reservation.Dayid, reservation.Roomid, reservation.Email, reservation.Locationid);
        }   

        public void CreateReservation(int Reservationid, DateTime Dayid, string Roomid, string Email, string Locationid) 
        {
            var cs = Database.Database.Connector();

            using var con = new NpgsqlConnection(cs);
            con.Open();

            var sql = "INSERT INTO reservation(reservationid, dayid, roomid, email, locationid) VALUES(@Reservationid, @Dayid, @Roomid, @Email, @Locationid)";
            using var cmd = new NpgsqlCommand(sql, con);
            cmd.Parameters.AddWithValue("reservationid", Reservationid);
            cmd.Parameters.AddWithValue("dayid", Dayid);
            cmd.Parameters.AddWithValue("roomid", Roomid);
            cmd.Parameters.AddWithValue("email", Email);
            cmd.Parameters.AddWithValue("locationid", Locationid);

            cmd.Prepare();

            cmd.ExecuteNonQuery();
            con.Close();  
        }

        public List<WorkspaceModel> PopulateReservations()
        {
            var cs = Database.Database.Connector();
            List<WorkspaceModel> res = new List<WorkspaceModel>();
            using var con = new NpgsqlConnection(cs);
            {
                string query = "Select location FROM workspaces";
                using NpgsqlCommand cmd = new NpgsqlCommand(query, con);
                {
                    cmd.Connection = con;
                    con.Open();
                    using (NpgsqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            res.Add(new WorkspaceModel { LocationName = dr["location"].ToString() });
                        }
                    }
                    
                    con.Close();
                }
            }


            return res;
        }

        public List<WorkspaceModel> ShowRoom()
        {
            var cs = Database.Database.Connector();
            List<WorkspaceModel> res = new List<WorkspaceModel>();
            using var con = new NpgsqlConnection(cs);
            {
                string query = "Select room FROM workspaces";
                using NpgsqlCommand cmd = new NpgsqlCommand(query, con);
                {
                    cmd.Connection = con;
                    con.Open();
                    using (NpgsqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            res.Add(new WorkspaceModel { RoomName = dr["room"].ToString() });
                        }
                    }
                    
                    con.Close();
                }
            }


            return res;
        }


    }
}

如果有必要,这里是预订模型:

namespace Project_Corona.Models
{
    public class ReservationModel
    {
        [BindProperty]
        public int Reservationid {get; set;}
        [BindProperty]
        public DateTime Dayid {get; set;}
        [BindProperty]
        public string Roomid {get; set;}
        [BindProperty]
        public string Email {get; set;}
        [BindProperty]
        public string Locationid {get; set;}


    }

}

【问题讨论】:

    标签: html postgresql forms asp.net-core razor-pages


    【解决方案1】:

    您的数据库中有LocationidRoomid 吗?因为&lt;option&gt;中的值不会随着循环而改变,所以可以添加一个循环变量来设置值,就像这样。

     <td>Select location</td>
            <div class="form-group">
                <select id="locations" name="Locationid">
                    @for (var i= 0; i < Model.PopulateReservations().Count(); i++)
                    {
                        <option value="@(i+1)">@Html.DisplayFor(m => Model.PopulateReservations()[i].LocationName)</option>
                    }
                </select>
            </div>
    

    如果无法通过这种方式映射LocationName,则需要同时从数据库中查询LocationId,然后赋值给value。或者您可以将值分配为此代码。

    <select id="rooms" name="Roomid">
                    @foreach (var reservations in @Model.ShowRoom())
                    {
                        <option value="@reservations.RoomName">@Html.DisplayFor(m => reservations.RoomName)</option>
                    }
                </select>
    

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多