【问题标题】:asp-items in the select returning path instead of database result选择返回路径而不是数据库结果中的 asp-items
【发布时间】:2020-06-28 16:31:36
【问题描述】:

我有 2 张桌子:

FoodItem(FoodID,Name,etc..)
Invoice(InvoiceId,FoodId (foreign key of FoodID),etc..)

我首先创建了一个 DbContext 和一个模型类 Invoice.cs,然后我向控制器添加了一个脚手架项,在该控制器中为发票的 Create、Delete、Details、Edit 和 Index 创建了视图。

我正在尝试让 Create.cshtml 将外键 FoodId 的下拉列表放在下拉列表中的 FoodItem 表中,而不是手动输入 ID。

我有以下几点:

在 InvoicesController 我添加了:

 public static List<Invoice> Invoice()
        {
            List<Invoice> jt = new List<Invoice>();
            string connection = "Persist Security Info=False;Integrated Security=true;Initial Catalog=invoicesystem;Data Source=.;Connection Timeout=100000;";
            using (SqlConnection sqlconn = new SqlConnection(connection))
            {
                using (SqlCommand sqlcomm = new SqlCommand("select FoodItem.Name from FoodItem full join Invoice on Invoice.FoodId=FoodItem.FoodID")) 
                {
                    using(SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        sqlcomm.Connection = sqlconn;
                        sqlconn.Open();
                        sda.SelectCommand = sqlcomm;

                        SqlDataReader sdr = sqlcomm.ExecuteReader();
                        while(sdr.Read())
                        {
                            Invoice invoice = new Invoice();
                            invoice.FoodId = sdr["Name"].ToString();
                            jt.Add(invoice);
                        }


                    }

                    return jt;
                }

            }

        }

我通过调用函数在Controller类的Create()方法中添加了一个ViewData:

 public IActionResult Create()
        {
            ViewData["Food Name"] = Invoice();
            return View();
        }

这是我正在使用的模型类:

namespace RoleBaseAuth.Models
{
    public class Invoice
    {
        [Key]
        public int InvoiceId { get; set; }

        [ForeignKey("AspNetUsers")]
        public string  UserId { get; set; }
        
        [ForeignKey("FoodItem")]
        public string FoodId{ get; set; }
        public int quantity { get; set; }
        public double totalsum { get; set; }

    }
}

在 Create.cshtml 文件中,我使用 ViewData 定义了变量,并将 FoodId 的常规替换为以下格式的选择列表:

@{
    ViewData["Title"] = "Create";
    var invoice = (List<Invoice>)ViewData["Food Name"];
}

<div class="form-group">
                    <label asp-for="FoodId" class="control-label"></label>
                    <select asp-for="FoodId" class="form-control" asp-items='new SelectList(invoice,"Name")'></select>
                    <span asp-validation-for="FoodId" class="text-danger"></span>
                </div>

我得到这个结果:

【问题讨论】:

  • 你期待什么? Invoice.ToString()RoleBaseAuth.Models.Invoice。要么覆盖发票中的 ToString 方法,要么告诉 Razor 要显示哪个 Invoice 属性。
  • 对不起,我是这方面的初学者,如何让它显示实际的数据库结果? @LegacyCode

标签: c# asp.net asp.net-mvc asp.net-core


【解决方案1】:

1-create a class named DrpItems in models
 public class DrpItems
 {
  public string Name {get;set;}
  public int FoodId {get;set;}
  }
2-change the list type
List<DrpItems> jt = new List<DrpItems>();
3-Change your query
 using (SqlCommand sqlcomm = new SqlCommand("select distinct FoodItem.FoodId as FoodId,FoodItem.Name as Name from FoodItem full join Invoice on Invoice.FoodId=FoodItem.FoodID")) 
4- public static List<DrpItems> Invoice()
5-change loop
            while(sdr.Read())
                        {
                            DrpItems item = new DrpItems();
                            item.FoodId = sdr["FoodId"];
                item.Name = sdr["Name"];
                            jt.Add(item);
                        }



6-
@{
    ViewData["Title"] = "Create";
    var invoice = ViewData["Food Name"] as RoleBaseAuth.Models.DrpItems;
}

   <select asp-for="Location" asp-items="(SelectList)@ViewData["Food Name"]" class="form-control" ></select>

or
 <select asp-for="FoodId" 
            asp-items="@(new SelectList(invoice,"FoodId","Name"))">
        <option>Please select one</option>
    </select>

【讨论】:

    【解决方案2】:

    只需如下更改:

    <select asp-for="FoodId" class="form-control" asp-items='new SelectList(invoice,"FoodId","FoodId")'></select>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多