razor-pages 相关问题

适用于与Razor Pages相关的问题,这是从ASP.NET Core 2.0开始的ASP.NET Core的一个功能。

如何在razor页面中为多行设置一个提交按钮?

我获取联系人并显示与我的 asp.net core 项目中每个联系人关联的所有地址。下面是视图 @模型IEnumerable 我获取联系人并显示与我的 asp.net core 项目中每个联系人关联的所有地址。下面是视图@model IEnumerable<ContactModel> <table class="table table-stripped table-bordered text-center"> <thead> <tr> <th>no</th> <th>address</th> <th>confirm address</th> </tr> </thead> <tbody> @{ int id = 0; foreach (var contact in Model) { id = id + 1; <tr> <td>@id</td> <td>@contact.Address</td> <td> <form method="post" asp-action="EditContacts"> <input type="hidden" value="@contact.Id" name="id" /> <input type="checkbox" class="h4 form-check-input single-checkbox" name="isValid" value="true" /> </form> </td> </tr> } } </tbody> </table> @section Scripts { <script> $(document).ready(function() { $('.single-checkbox').change(function() { $('.single-checkbox').not(this).prop('checked', false); if ($('.single-checkbox:checked').length > 0) { $('#submitButton').show(); } else { $('#submitButton').hide(); } }); }); </script> } 下面是view对应的action[HttpPost] public async Task<IActionResult> EditContacts(int id, bool? isValid) { var dbContact = await _db.ContactModels.FindAsync(id); var contactsWithInvalidAddress = await _db.ContactModels.Where(c=> c.PostalCode == dbContact.PostalCode && c.Id != id).ToListAsync(); if(isValid == true) { dbContact.IsValid = true; foreach(var contact in contactsWithInvalidAddress) { contact.IsValid = false; } } await _db.SaveChangesAsync(); return View(); } 问题是,如果我在表单中添加提交按钮,它会为一个联系人的每一行地址生成一个新的按钮,而我只需要在表单末尾有一个提交按钮。我尝试更改razor页面中form标签的位置,但这一次遇到了绑定问题;这意味着即使我单击地址的第二行,它也会返回第一行的 id! 我认为你需要重组你的表单以包含整个表格, 通过这种方式,您可以为整个表单设置一个提交按钮,而不是为每一行设置一个单独的表单。 然而,管理多个复选框并确保在选中复选框时仅提交相关的 id 和 isValid 值可能会很棘手。 下面的 Razor 视图和控制器操作来处理这种情况 首先调整您的视图以将整个表格包含在单个表单中,并使用隐藏输入来管理正在提交的联系人的“isValid”状态。 您可以使用 JS 根据选中的复选框来更新这些隐藏的输入 @model IEnumerable<ContactModel> <form method="post" asp-action="EditContacts"> <table class="table table-stripped table-bordered text-center"> <thead> <tr> <th>no</th> <th>address</th> <th>confirm address</th> </tr> </thead> <tbody> @{ int id = 0; foreach (var contact in Model) { id++; <tr> <td>@id</td> <td>@contact.Address</td> <td> <input type="checkbox" class="h4 form-check-input single-checkbox" name="SelectedContactId" value="@contact.Id" /> </td> </tr> } } </tbody> </table> <button type="submit" id="submitButton" style="display:none;">Submit</button> </form> 然后调整你的 Js 以处理基于复选框操作的提交按钮的显示和隐藏。 由于您现在只有一个表单,因此确保一次只能选择一个复选框的 JavaScript 逻辑保持不变。 @section Scripts { <script> $(document).ready(function() { $('.single-checkbox').change(function() { $('.single-checkbox').not(this).prop('checked', false); $('#submitButton').toggle($('.single-checkbox:checked').length > 0); }); }); </script> } 最后,您可以调整控制器操作以接受可能为空的SelectedContactId。此 ID 将代表其 isValid 状态正在更新的所选联系人。 [HttpPost] public async Task<IActionResult> EditContacts(int? SelectedContactId) { if (SelectedContactId.HasValue) { var dbContact = await _db.ContactModels.FindAsync(SelectedContactId.Value); if (dbContact != null) { var contactsWithInvalidAddress = await _db.ContactModels.Where(c => c.PostalCode == dbContact.PostalCode && c.Id != SelectedContactId.Value).ToListAsync(); dbContact.IsValid = true; foreach (var contact in contactsWithInvalidAddress) { contact.IsValid = false; } await _db.SaveChangesAsync(); } } // Redirect to a relevant view or action after processing return RedirectToAction("YourViewName"); }

回答 1 投票 0

向表单添加动态列表元素和客户端验证

我想将类类型 Food 的元素添加到表单中。当用户单击某个按钮时,应显示包含两个元素的行: 一个下拉列表来选择食物类型

回答 1 投票 0

获取选定结果的值未定义

我有一个带有选项和ID的选择。通过一个函数,我试图获取 onClick 函数上此选择的值。在函数中,我警告数据,但它要么未定义,要么为空。我的选择: <

回答 1 投票 0

c# RazorPage - 尝试通过模态弹出窗口添加记录时出现 NullReferenceException

我对 C# razorpages 比较陌生。我使用实体框架创建了一个示例项目,并使用 ScaffoldedItems 功能生成了我的页面。 我想要的不是一个创建页面,而是一个

回答 1 投票 0

我的 Blazor 服务器端应用程序的范围服务正在从远程 PC 循环读取过程值。如何在我的剃须刀页面上实时显示此值?

在我的 Blazor 服务器端应用程序中,我有一个范围服务,它正在从远程 PLC 循环读取过程值。通过下面的代码,我尝试在我的剃刀页面上实时显示该值。但只买一个

回答 1 投票 0

当我在 .Net razor 页面中发布数据时,为什么我的部分视图没有更新?

我正在构建一个网络应用程序来接受印刷业务的订单。将订单商品添加到购物车后,我希望在同一页面的部分视图中更新购物车的内容。

回答 1 投票 0

如何在 ASP.NET 中的 PageModel 中处理 fetch post 请求

我有一个 Index.cshtml.cs 文件,其 PageModel 代码如下: 命名空间 DemoApp.Pages { 公共类 IndexModel :PageModel { 公共无效OnPost(){} 公共无效OnGet(){} ...

回答 1 投票 0

带有 Razor Pages 的 Dropzone 未将文件提交到 HttpContext.Request.Form.Files

我一直在努力在我的razor 页面上实现dropzone.js。我目前正在尝试创建一个帮助台,其中 dropzone 允许用户拖动文件以连同其票证一起上传。我还没有...

回答 1 投票 0

如何将值传递回上一个 Razor 页面?

我有一个结构如下的应用程序: 表 1 = 客户端 表 2 = 面板 每个客户端可以有多个面板。当我提交“创建客户端”页面时,我的应用程序将导航到并打开“创建”

回答 1 投票 0

无法在 Razor Pages 项目中添加第二个数据库上下文的迁移

添加迁移和发生错误的命令 我已在 AppSetting.json 文件中添加了连接字符串,并在 Program.cs 中注册了上下文。 我无法在第二个使用迁移

回答 2 投票 0

找不到视图组件“Shoes.Components.CartViewComponent”的“Invoke”或“InvokeAsync”方法

我正在研究 ASP Net Core MVC 中的视图组件。这是我的视图组件 公共 CartViewComponent(GiaydepContext 上下文) { _context = 上下文; } 公共 IViewComponentResult Ivoke() {...

回答 1 投票 0

主页渲染后未加载部分视图

我有一个剃刀主页,其中包含一个使用 OnGet() 事件加载的选择器,当用户单击此选择器的值时,将调用 jQuery 函数来加载包含某些值的部分视图。

回答 1 投票 0

通过 Ajax 在 ASP.NET Core Web API 中的 POST 上出现 400 错误请求(不是针对控制器,而是针对同一页面事件处理程序)

我在 .NET 8 和 VS2022 中使用 ASP.NET Core Razor 页面。 我试图让我的控制器对公众隐藏,所以我的所有 POST 请求首先调用同一页面。例如 www.mywebsite.com/index 将...

回答 1 投票 0

如何使用 <a> 标签传递多个列表值?

基本示例链接 - 以下链接是我正在尝试构建的。但这仅适用于单一值。 问题详细信息 在 中选择多种颜色后,然后单击 标签,我想要 基本示例链接 - 以下链接是我正在尝试构建的。但这仅适用于单一值。 问题详细信息 在我在colors中选择多个<select>后,然后单击<a>标签,我想传递我在<select>中选择的值。目前,单击 <a> 标签后,它不会保留在 <select> 内选择的值 Step#1 在这里,我创建带有 2 个过滤器的表单。 1 个搜索文本框和 2 个选择列表 <form asp-page="./index" method="get"> <input type="text" asp-for="SearchString" /> <select asp-for="Colors" asp-items="@Model.Colors_SELECT" class="MultiSelect" multiple>...</select> ... </form> 步骤#2 在表格网格中显示数据。 <a> 正在将过滤器传递给 url <table> .... <a asp-page="./My_Training" asp-route-SearchString="@Model.SearchString" asp-route-Colors="@Model.Colors" asp-route-SortOrder="@Model.Colors_Sort"> @Html.DisplayNameFor(model => model.MyListData[0].Colors) </a> .. // more `<a>` tags. 1 for each column </table> Step#3 后端代码: - 主要是绑定过滤器值 [BindProperty(SupportsGet = true)] public string? SearchString { get; set; } [BindProperty(SupportsGet = true)] public List<string>? Colors { get; set; } public SelectList? Colors_SELECT { get; set; } public async Task OnGetAsync() { // everything is auto bind to properties } 我尝试过的:根据谷歌的说法,他们建议将asp-all-route-data与Dictionary一起使用。我已经尝试过这段代码,但它不适用于多值。 Dictionary 不允许使用相同的密钥。例如:如果我使用 asp-all-route-data 并传递像 Colors[0]=Red&Colors[1]=Green 这样的 URL,那么它不会保留在 <select> 中选择的值 我也尝试过这样做。这是可行的,但如果数据网格中有太多过滤器和列,代码会很混乱并且难以维护 <input type="hidden" asp-for="URL_String" /> ... <a href="/Index? @Model.URL_String&[email protected]_Sort"> @Html.DisplayNameFor(model => model.CourseTakenList[0].Colors) </a> public string? URL_String { get; set; } = ""; public async Task<IActionResult> OnPostAsync() { string? createURL = "?"; createURL += $"SearchString={SearchString}&"; foreach (var p in Colors) { createURL += $"Colors={p}&"; } if (createURL.EndsWith("?") || createURL.EndsWith("&")) { createURL = createURL.TrimEnd(createURL[createURL.Length - 1]); //remove last '&' } string url = $"{HttpContext.Request.Path}{createURL}"; return Redirect(url); } public async Task OnGetAsync() { URL_String = Request.QueryString.ToString().Replace("??", "?"); CurrentSort = Request.Query["SortOrder"]; } 因为asp-all-route-data不能用同一个key传值,所以需要自己添加索引,请参考这个简单的demo: @{ var colors = new Dictionary<string, string>(); var i = 0; foreach (var item in Model.colors) { colors.Add($"colors[{i}]", item); i++; } } <a asp-page="index" asp-all-route-data="colors">Test</a> 它将传递如下数据: ?colors[0]=red&colors[1]=green&colors[2]=black 演示: ==========================更新================== <select multiple id="selectone"> <option value="red">red</option> <option value="black">black</option> <option value="white">white</option> <option value="yellow">yellow</option> </select> <button onclick="MySelect()">Select color</button> <a asp-page="index" asp-route-SearchString="Test" id="color">Test</a> <script> function MySelect(){ var result = document.getElementById("selectone").selectedOptions; var arr=[]; for(let i=0,len = result.length;i<len;i++){ if(result[i].selected){ arr.push("colors["+i+"]=" + result[i].value) } } var str=arr.join("&"); var a = document.getElementById("color").getAttribute('href'); var url = a+ "&" + str; document.getElementById("color").href = url; } </script> 演示:

回答 0 投票 0

字典的替代品

出现错误:在线 CurrentFilters.Add($"Colors", Colors[i].ToString()); 处理请求时发生未处理的异常。 ArgumentException:具有相同键的项目...

回答 1 投票 0

重定向到 ASP.NET Core razor 页面中的页面时出错

我想重定向到此页面 我想重定向到的根目录, 但我收到了这个错误: InvalidOperationException:没有名为“Miner/MinerDetail”的页面与提供的值匹配。 我想重做...

回答 1 投票 0

在字符串变量中提供角色 ID 时,RoleManager 的 FindRoleById() 返回 null(Identity 3.0)

我在使用 dotnet core 的 RoleManager 时面临一个非常特殊的问题。 我使用以下代码在 Role 变量中获取空值。 公共 IdentityRole 角色 { 获取;放; } 圣...

回答 1 投票 0

ASP.NET Core Razor Pages Ajax 帖子使用 FromBody 为空

我正在开发 ASP.NET (6.0) Razor Pages 应用程序。其中一个页面需要使用 AJAX 发布数据,但是该发布始终为空。 我尝试使用之前的相关问题来解决这个问题...

回答 1 投票 0

用于登录 appsettings.json (.net6) 的 IOptionsMonitor 返回旧值/默认值

我正在尝试使用 IOptionsMonitor 在运行时在 appsettings.json 中更改 ILogger 日志级别,但尽管如此,我已将 IOptionsMonitor 用于其他设置,例如应用程序中使用的电子邮件设置...

回答 2 投票 0

如何将 IPageFilter 仅应用于 Razor 页面中的 OnPost 处理程序

我想将 IPageFilter 应用于 Razor 页面中的 OnPost 处理程序。 像这样: [我的过滤器] public IActionResult OnPost() { // 任意代码 } 但是当我这样做时,Visual studio 强迫我应用我的 f...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.