【问题标题】:Cannot get Query elements on razor page无法在剃刀页面上获取查询元素
【发布时间】:2020-12-30 09:15:14
【问题描述】:

我的页面上有两个查询选择,一个用于客户,一个用于供应商。为什么我看不到任何元素?

== c#代码==

c# code of page

Pic of VS19 with debugger

在调试器元素中显示见图片 2

== 在 Razor 页面中==

Pic of HTML Code

很遗憾,我看不到任何物品。有什么想法吗?

Layout of page

附上你得到我的代码抱歉只发布图片

我的 c# 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc.Rendering;
using WorkCollaboration.Data;
using WorkCollaboration.Models;

namespace WorkCollaboration.Pages.Contacts
{ 
    public class CreateModel : PageModel
    {
        private readonly WorkCollaboration.Data.WorkCollaborationContext _context;

        public CreateModel(WorkCollaboration.Data.WorkCollaborationContext context)
        {
            _context = context;
        }

    public async Task<IActionResult> OnGetAsync()
        {
            CustomerDropDownDisp = await _context.CustomerDropDown.ToListAsync();  // Added for DropDown
            SupplierDropDownDisp = await _context.SupplierDropDown.ToListAsync();  // Added for DropDown
            return Page();
        }

        [BindProperty]
        public Contact Contact { get; set; }
        public DayOfWeek DayOfWeek { get; set; }
        public IEnumerable<CustomerDropDown> CustomerDropDownDisp { get; set; }
        public IEnumerable<SupplierDropDown> SupplierDropDownDisp { get; set; }

        // To protect from overposting attacks, enable the specific properties you want to bind to, for
        // more details, see https://aka.ms/RazorPagesCRUD.
        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Contact.Add(Contact);
            await _context.SaveChangesAsync();

            return RedirectToPage("/ContactsOverview/Index");
        }
    }
}

这是我的 Razor 页面 Html

@page 
@model WorkCollaboration.Pages.Contacts.CreateModel

@{
    ViewData["Title"] = "Create";
    ViewData["RandomId"] = Guid.NewGuid().GetHashCode();
}

<h1>Create</h1>
<h4>Contact</h4>
<p>
    <a asp-page="/ContactsOverview/Index">Back to Index</a>
</p>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Contact.ContactId" class="control-label"></label>
                <input asp-for="Contact.ContactId" value='@ViewData["RandomId"]' readonly="readonly" class="form-control" />
                <span asp-validation-for="Contact.ContactId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.LastName" class="control-label"></label>
                <input asp-for="Contact.LastName" class="form-control" />
                <span asp-validation-for="Contact.LastName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.FirstName" class="control-label"></label>
                <input asp-for="Contact.FirstName" class="form-control" />
                <span asp-validation-for="Contact.FirstName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.CustomerId" class="control-label"></label>
                <input asp-for="Contact.CustomerId" class="form-control" />
                <span asp-validation-for="Contact.CustomerId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.CustomerId" class="control-label"></label>
                <select id="CusId" aps-items="@(new SelectList(Model.CustomerDropDownDisp,"CusId","CusName"))">
                    <option value="" selected disabled> -- Select Customer--</option>>
                </select>
                <span asp-validation-for="Contact.CustomerId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.SupplierId" class="control-label"></label>
                <input asp-for="Contact.SupplierId" class="form-control" />
                <span asp-validation-for="Contact.SupplierId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.SupplierId" class="control-label"></label>
                <select id="SupId" aps-items="@(new SelectList(Model.SupplierDropDownDisp,"SupId","SupName"))">
                    <option value="" selected disabled> -- Select Supplier--</option>>
                </select>
                <span asp-validation-for="Contact.SupplierId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.PrivateStreet" class="control-label"></label>
                <input asp-for="Contact.PrivateStreet" class="form-control" />
                <span asp-validation-for="Contact.PrivateStreet" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.PrivateStreetNo" class="control-label"></label>
                <input asp-for="Contact.PrivateStreetNo" class="form-control" />
                <span asp-validation-for="Contact.PrivateStreetNo" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.PrivateStreetAdditionalInfo" class="control-label"></label>
                <input asp-for="Contact.PrivateStreetAdditionalInfo" class="form-control" />
                <span asp-validation-for="Contact.PrivateStreetAdditionalInfo" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.PrivateZip" class="control-label"></label>
                <input asp-for="Contact.PrivateZip" class="form-control" />
                <span asp-validation-for="Contact.PrivateZip" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.PrivateTown" class="control-label"></label>
                <input asp-for="Contact.PrivateTown" class="form-control" />
                <span asp-validation-for="Contact.PrivateTown" class="text-danger"></span>
            </div>
            <div class="form-group">
                @Html.LabelFor(model => model.Contact.PrivateCountry, htmlAttributes: new { @class = "form-group" })
                <div class="form-group">
                    @Html.DropDownListFor(model => model.Contact.PrivateCountry, new List<SelectListItem>
                    {
                        new SelectListItem {Text = "CH", Value = "CH", Selected = true },
                        new SelectListItem {Text = "D", Value = "D" },
                        new SelectListItem {Text = "FL", Value = "FL" },
                    }, new { @class = "form-control" })
                    @Html.ValidationMessageFor(model => model.Contact.PrivateCountry, "", new { @class = "text-danger" })
                </div>
            </div>
            <div class="form-group">
                <label asp-for="Contact.PrivatePhone" class="control-label"></label>
                <input asp-for="Contact.PrivatePhone" class="form-control" />
                <span asp-validation-for="Contact.PrivatePhone" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.BusinessPhone" class="control-label"></label>
                <input asp-for="Contact.BusinessPhone" class="form-control" />
                <span asp-validation-for="Contact.BusinessPhone" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.MobilePhone" class="control-label"></label>
                <input asp-for="Contact.MobilePhone" class="form-control" />
                <span asp-validation-for="Contact.MobilePhone" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Contact.Mail" class="control-label"></label>
                <input asp-for="Contact.Mail" class="form-control" />
                <span asp-validation-for="Contact.Mail" class="text-danger"></span>
            </div>
            <select asp-for="DayOfWeek" asp-items="Html.GetEnumSelectList<DayOfWeek>()">
                <option value="">Choose a day</option>
            </select>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
                <a href="/ContactsOverview/Index" class="btn btn-primary">Back to List</a>
            </div>
        </form>
    </div>
</div>

【问题讨论】:

  • 欢迎来到 Stack Overflow。请编辑您的帖子以将您的代码直接包含为文本,而不是屏幕截图。代码的屏幕截图难以阅读、复制或搜索。依赖代码截图的帖子如果不被删除,通常会被关闭,这会减少你获得答案的变化。 (我已投票结束这个问题,但一旦你编辑了你的问题,我很乐意撤回我的投票。)
  • 除此之外,在您的调试器屏幕截图中,您正在显示SupplierDropDownDisp 的结果,但突出显示的代码都与CustomerDropDownDisp 相关。您是否看到供应商下拉列表的结果?您确定调试器在CustomerDropDownDisp 中显示数据吗?我问是因为屏幕截图没有证明这一点——尽管它也不矛盾。
  • 请设置断点检查CustomerDropDownDisp是否包含数据,提问时请分享代码而不是截图。

标签: asp.net-core razor selection


【解决方案1】:

在为CustomerDropDownDisp设置数据的那一行打断点。这一定是你的数据库没有数据造成的。你可以按照下面的步骤来检查。

设置断点并按下 IIS Express 启动项目:

您可以查看数据库是否不包含CustomerDropDownDispcount=0 的任何数据,并且剃须刀不显示元素:

如果它包含CustomerDropDownDisp 的数据,则选择列表可以成功呈现:

【讨论】:

  • 您要求我发布代码,现在您拒绝了两次...同时我发现问题出在 Razor 页面(旧代码)所以如果可以,我该如何发布代码不使用编辑?评论太短了
  • 我想我需要针对问题提出新的请求,还是?感谢您的帮助!
  • 嗨@ChristofOberholzer,您需要编辑您的问题而不是编辑我的答案来分享您的详细代码。如果仍然是同样的问题,则无需提出新请求。
  • 您是否检查过CustomerDropDownDisp 是否有像我的回答那样的数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2021-12-14
  • 2020-02-19
  • 2021-11-28
  • 2020-05-22
相关资源
最近更新 更多