Razor是ASP.NET网页和ASP.NET MVC使用的模板语言(自版本3开始)。它在HTML生成之上添加了一层抽象。它支持HTML标记和C#或VB代码之间的无缝转换。标记和代码之间的转换由“@”符号表示。
webgrid 中的分页在 asp.net mvc 5 中不起作用
我有以下视图和控制器。问题是,当启用分页并单击下一页时,上一个视图消失了 @使用系统 @使用System.Web.Helpers @*@型号列表 我有以下视图和控制器。问题是,当启用分页并单击下一页时,上一个视图消失了 @using System @using System.Web.Helpers @*@model List<DataTransferObjects.UserClaimHistory>*@ <!DOCTYPE html> <html lang="en"> <head runat="server"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="~/Content/style.css" rel="stylesheet" type="text/css" /> @*<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>*@ <script src="~/Scripts/jquery-1.7.1.js"></script> <style> /*Here I will write some css for looks good*/ th, td { padding: 5px; } th { background-color: gray; } </style> </head> @{ ViewBag.Title = "ViewReports"; var grid = new WebGrid(Model, canPage: false, rowsPerPage: 2, selectionFieldName: "selectedRow", ajaxUpdateContainerId: "gridContent", canSort: false); } @{ var fromDateVal = (DateTime)ViewBag.fromDate; var toDateVal = (DateTime)ViewBag.toDate; } @using (Html.BeginForm("Index", "ViewReport", FormMethod.Post)) { <div class="container"> @{ var homeHeader = Html.Partial("_HomeHeader"); } @homeHeader <div id="logout-div"> @Html.ActionLink("Log Out", "Logout", "Home", null, null ) </div> @{ var homeLeftPanel = Html.Partial("_HomeLeftPanel"); } @homeLeftPanel <div> From Date: @Html.TextBox("fromDate", string.Format("{0:yyyy-MM-dd}", fromDateVal), new { @id = "fromDate", @class = "datefield", type = "date" }) To Date: @Html.TextBox("toDate", string.Format("{0:yyyy-MM-dd}", toDateVal), new { @id = "toDate", @class = "datefield", type = "date" }) <input type="submit" value="Search" /> </div> <div id="main" style="padding: 25px;"> @grid.GetHtml( htmlAttributes: new { id = "MainGrid", width = "60%" }, tableStyle: "table table-bordered table-responsive", headerStyle: "header", alternatingRowStyle: "alt", selectedRowStyle: "select", columns: grid.Columns( grid.Column("UserName", "User Name"), grid.Column("Email", "Email"), grid.Column("Claim", "Accessed"), grid.Column(header: "AccessedOn", format: (item) => string.Format("{0:dd-MM-yyyy}", item.AccessedOn)), grid.Column(format: (item) => { if (item.Count > 1) { var subGrid = new WebGrid(source: item.List, canSort: false); return subGrid.GetHtml(displayHeader: true, htmlAttributes: new { id = "SubGrid", width = "100%" }, columns: subGrid.Columns( subGrid.Column("UserName", "User Name"), subGrid.Column("Email", "Email"), subGrid.Column("Claim", "Accessed"), subGrid.Column("AccessedOn", "AccessedOn") ) ); } else { return null; } }) ) ) <script> $(document).ready(function () { var size = $("#main #MainGrid > thead > tr > th").size(); // get total column $("#main #MainGrid > thead > tr > th").last().remove(); // remove last column $("#main #MainGrid > thead > tr").prepend("<th></th>"); // add one column at first for collapsible column $("#main #MainGrid > tbody > tr").each(function (i, el) { $(this).prepend( $("<td></td>") .addClass("expand") .addClass("hoverEff") .attr('title', "click for show/hide") ); //Now get sub table from last column and add this to the next new added row var table = $("table", this).parent().html(); // // alert(table); //add new row with this subtable // ADD CLICK EVENT FOR MAKE COLLAPSIBLE if (table !== null) { $(this).after("<tr><td></td><td style='padding:5px; margin:0px;' colspan='" + (size - 1) + "'>" + table + "</td></tr>"); $("table", this).parent().remove(); $(".hoverEff", this).live("click", function () { $(this).parent().closest("tr").next().slideToggle(100); $(this).toggleClass("expand collapse"); }); } else { $(this).find('td:eq(0)').removeClass(); } }); //by default make all subgrid in collapse mode $("#main #MainGrid > tbody > tr td.expand").each(function (i, el) { $(this).toggleClass("expand collapse"); $(this).parent().closest("tr").next().slideToggle(100); }); }); </script> </div> @if (ViewBag.Count > 0) { <div> @Html.ActionLink("Export", "ExportToExcel", "ViewReport", new { fromDate = fromDateVal, toDate = toDateVal}, null) </div> } @{ var homeFooter = Html.Partial("_HomeFooter"); } @homeFooter </div> } </html> 这是控制器: public ActionResult Index(DateTime? fromDate, DateTime? toDate) { if (!fromDate.HasValue) fromDate = DateTime.Now.Date; if (!toDate.HasValue) toDate = fromDate.GetValueOrDefault(DateTime.Now.Date).Date.AddDays(1); if (toDate < fromDate) toDate = fromDate.GetValueOrDefault(DateTime.Now.Date).Date.AddDays(1); ViewBag.fromDate = fromDate; ViewBag.toDate = toDate; var userClaims = DbAccessWebApiHandler.GetUserClaimAccesshistory(new DateSelection { StartDate = fromDate.Value, EndDate = toDate.Value }); if (userClaims != null) { ViewBag.Count = userClaims.Count; var newList = userClaims.GroupBy(x => new { x.UserName, x.Email, x.Claim, x.AccessedOn.Date }) .Select(y => new UserClaimHistoryGroup { UserName = y.Key.UserName, Email = y.Key.Email, Claim = y.Key.Claim, AccessedOn = y.Key.Date, List = y.ToList(), Count = y.ToList().Count }); return View(newList); } userClaims = new List<UserClaimHistory>(); return View(userClaims); } [System.Web.Mvc.HttpGet] public ActionResult ExportToExcel(DateTime? fromDate, DateTime? toDate) { if (!fromDate.HasValue) fromDate = DateTime.Now.Date; if (!toDate.HasValue) toDate = fromDate.GetValueOrDefault(DateTime.Now.Date).Date.AddDays(1); if (toDate < fromDate) toDate = fromDate.GetValueOrDefault(DateTime.Now.Date).Date.AddDays(1); ViewBag.fromDate = fromDate; ViewBag.toDate = toDate; var userClaims = DbAccessWebApiHandler.GetUserClaimAccesshistory(new DateSelection { StartDate = fromDate.Value, EndDate = toDate.Value }); if (userClaims != null) { var gv = new GridView(); gv.AutoGenerateColumns = false; gv.Columns.Add(new BoundField { HeaderText = "UserName", DataField = "UserName" }); gv.Columns.Add(new BoundField { HeaderText = "Email", DataField = "Email" }); gv.Columns.Add(new BoundField { HeaderText = "Accessed", DataField = "Claim" }); gv.Columns.Add(new BoundField { HeaderText = "Date", DataField = "AccessedOn" }); var dt = new DataTable(); dt.Columns.Add("UserName"); dt.Columns.Add("Email"); dt.Columns.Add("Claim"); dt.Columns.Add("AccessedOn"); foreach (var item in userClaims) { dt.Rows.Add(item.UserName, item.Email, item.Claim, item.AccessedOn); } gv.DataSource = dt; gv.DataBind(); for (var i = 0; i < userClaims.Count; i++) { gv.Rows[i].Height = 40; } Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment; filename=Reports.xls"); Response.ContentType = "application/ms-excel"; Response.Charset = ""; var sw = new StringWriter(); var htw = new HtmlTextWriter(sw); gv.RenderControl(htw); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End(); } return View("Index"); } 能够通过以下脚本工作 var links = $('a[href*=page], a[href*=sort]'), form = $('form'); links.click(function () { form.attr("action", this.href); $(this).attr("href","javascript:"); form.submit(); }); 如在 MVC4 站点中进行排序或分页操作期间如何让 WebGrid 以 POST 而不是 GET 方式进行操作?
我正在使用 2sx 应用程序活动、课程和注册版本 6.17.1。我想通过向事件内容类型添加更多字段来扩展应用程序。我正在运行 DNN 9.13.04 和 2sxc 17.09.00。 我添加了...
使用 nuglify 或 Web Optimizer 缩小 razor html 页面?
我正在尝试 ASP.NET Core Web Optimizer,它在底层使用 NUglify。它非常适合 js 和 css,并且显然也支持 html,但我无法让它与 razor csh 一起工作...
我正在尝试使用此处的 Engine.Razor 库在 C# 中生成电子邮件模板。但我不明白他们的关键财产是做什么的? 根据文档我这样运行 电子邮件正文 = ...
我有一个 MudBlazor 应用程序,并且经常注意到百分比高度和宽度经常被忽略。 在我当前的示例中,我有一个 MudTab,我想在其中显示一个可滚动的 MudTreeView...
我正在 .NET 6 中构建 Blazor(Blazor 服务器)项目,我遇到了一个问题,在一个组件中我可以声明一个变量,但是当我尝试在我之后立即使用该变量执行某些操作时
根据这些商品的最低和最高价格,我想为我的复选框过滤器创建动态价格范围。例如,如果最低价格和最高价格之间的差异是 10 美元,我希望...
ASP.NET Core 8 Razor 页面路由与参数冲突的 PageModel
我正在使用 ASP.NET Core 8.0.8。我有各种模型代表连接数据库中的不同表。我有一个 Table.cshtml razor 页面,它将采用表的名称作为参数...
ASP.NET Core 8.0 Razor - 循环模型时出现 NullReferenceException
我正在尝试构建一个简单的应用程序,它可以迭代“汽车”(型号)名称。 尝试迭代通过 API 调用的项目时,出现以下错误。 索引.cshtml: @页 @模型
这可能很简单,但我只是还没有找到方法......:) 我在 cshtml 视图中有这段代码(示例已简化): @if(Model.LinkUrl != null) { 这可能很简单,但我只是还没有找到方法......:) 我在 cshtml 视图中有此代码(示例已简化): @if(Model.LinkUrl != null) { <a href="@Model.LinkUrl"> <h2>@Model.Name</h2> <img src="@Model.ImageUrl" /> </a> } else { <div> <h2>@Model.Name</h2> <img src="@Model.ImageUrl" /> </div> } 根据模型中是否有链接,我必须将相同的代码(和)包装在 或 中。 有没有办法避免重复这段代码: <h2>@Model.Name</h2> <img src="@Model.ImageUrl" /> 即有某种我可以调用来渲染它的辅助方法/混合吗? @functions { void SayHello(string something) { <h3>Hello @something</h3> } } 或者 Func<string, IHtmlContent> SayHello = @<h1>Hello @item</h1>;
我正在开发 Blazor 服务器项目,由于我是这项技术的新手,我面临着一个我无法理解的问题。 简而言之,我有一个小公式来将对象添加到我的 postgresDB 中。这个公式...
有 2 次浏览 指数 验证验证OTP 两者都有相同的controller,IndexController实现了Controller,即IndexController:Controller 预期流程:登陆索引视图,然后
.NET 8 Blazor Web 应用程序与使用 JWT 身份验证的 Web API AuthorizationHandlerContext 返回 null
我有两个 .NET 8 项目,一个 ASP.NET Core 8 Web API 和 Blazor Web 应用程序,交互式渲染模式设置为服务器。 Web API 处理身份验证并提供 JWT 令牌。注册...
我正在尝试通过剃刀页面上的 Ajax 调用提交表单数据。但是,我在创建要放入 Ajax 调用的 FormData 时遇到问题。 这是表格 我正在尝试通过 Razor 页面上的 Ajax 调用提交表单数据。但是,我在创建要放入 Ajax 调用的 FormData 时遇到问题。 这是表格 <form id="dropdownForm" asp-action="Index" asp-controller="Statements" method="post"> <input type="text" id="startInput" name="start" hidden /> <input type="text" id="endInput" name="end" hidden /> <div class="form-group"> <p>Choose an account</p> <select id="AccountDropdown" select class="selectpicker" data-size="10" data-live-search="true" asp-for="@Model.SelectedAccounts" multiple data-actions-box="true" data-style="btn-white" style="right:0; left:auto;"> @foreach (var item in Model.AccountDropdown) { if (Model.SelectedAccounts.Any(e => e.AccountValue == item.AccountValue)) { <option value="@item.AccountValue" selected>@item.AccountName (@item.AccountCode)</option> } else { <option value="@item.AccountValue">@item.AccountName (@item.AccountCode)</option> } } </select> </div> <div class="form-group"> <button id="accountSubmit" value="Update Selection" class="btn btn-primary">Update Selection</button> </div> 我在页面上有一个单独的按钮,我想将此表单提交到不同的控制器操作。 我所做的是。 let myForm = document.getElementById('dropdownForm'); let formData = new FormData(myForm); $.ajax({ async: false, cache: false, //contentType: 'multipart/form-data', contentType: false, type: 'POST', data : formData, url: '/Statements/GetStatementData', success: function (data) { tableData = data.StatementsList; }, error: function (e) { Console.log(e); } }); 变量 myForm 被正确拉取,并且它包含我需要的所有值和信息。但是 FormData 对象是空的,并且在内部 Ajax 调用上失败。 这是我声明后对象的屏幕截图formData 如有任何帮助,我们将不胜感激。 从 let formData = new FormData(myForm); 更改为 myForm.serialize() 您还应该输入 AccountDropdown 的名称。 注意:表单中输入标签的名称必须与模型中的属性名称相同,才能正确进行模型绑定。 let myForm = $('#dropdownForm'); //let formData = new FormData(myForm); $.ajax({ async: false, cache: false, //contentType: 'multipart/form-data', //contentType: false, type: 'POST', data : myForm.serialize(), url: '/Statements/GetStatementData', success: function (data) { tableData = data.StatementsList; }, error: function (e) { Console.log(e); } }); 更新: let myForm = $('#dropdownForm'); let data = myForm.serialize(); console.log(data); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form id="dropdownForm" asp-action="Index" asp-controller="Statements" method="post"> <input type="text" id="startInput" value="1" name="start" hidden /> <input type="text" id="endInput" value="2" name="end" hidden /> <select id="AccountDropdown" name="account"> <option value="A1">A1</option> </select> </form> 我为serialize()做了一个演示 $.ajax({ 网址: '/创建', 类型:'发布', 标题:{ 'RequestVerificationToken': $('input[name="__RequestVerificationToken"]').val() }, 数据:JSON.stringify(formData), 内容类型:'应用程序/json', 数据类型:'json', });
我在将 svg 文本元素绑定到 razor 时遇到问题。 如果我这样做 世界你好 它工作正常 - 但如果我这样做: &l...
我正在使用 ASP.NET Core 8.0 MVC 构建一个应用程序。 在我看来,在这里显示的代码中,法语重音字符显示得不好(参见第一个屏幕截图): @型号列表 我正在使用 ASP.NET Core 8.0 MVC 构建一个应用程序。 在此处显示的代码中,在我看来,法语重音字符显示得不好(参见第一个屏幕截图): @model List<ViewListTable> <head> <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /> <script type="text/javascript"> function f() { var myArray = []; @foreach (var d in Model) { @:myArray.push("@d.Name"); @:console.log("@d.Name"); } var cptData = myArray.length; var tableau = document.getElementById('tableau'); var tbl = document.createElement("table"); var x = 0; for (var i = 0; i < cptData / 3; i++) { var tr = document.createElement('tr'); for (j = 0; j < 3; j++) { var td = document.createElement('td'); if (x < cptData) { var a = document.createElement('a'); var el_span = document.createElement('span'); var linkText = document.createTextNode(myArray[x]); var tab = myArray[x]; el_span.setAttribute('style', 'color: #07C'); a.setAttribute('href', "'" + tab + "'"); a.setAttribute('class', 'button'); a.title = "Éditer les données de la table:"; a.appendChild(linkText); el_span.appendChild(a); td.appendChild(el_span); }; x += 1; tr.appendChild(td) }; tbl.appendChild(tr); } tableau.appendChild(tbl); } </script> </head> <body> <div id="tableau"></div> <script> f(); </script> </body> 但是标记元字符集 =“utf-8”是在我的 _layout 文件中设置的。我已经在同一个文件中测试了第二个代码,相反,它在同一个文件中工作正常(参见第二个屏幕截图): @model List<ViewListTable> <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /> </head> <body> <div class="container"> <div class="col-6"> Liste des tables </div> <table class="table table-bordered table-striped"> <thead> <tr> <th class="col-6"> Nom des tables de la BD </th> </tr> </thead> <tbody> @foreach (var obj in Model) { <tr> <td>@obj.Name</td> </tr> } </tbody> </table> </div> </body> </html> 在 JavaScript 代码中插入法语重音字符时,正确处理引号和其他特殊字符非常重要,需要对它们进行转义以确保字符串的正确性和安全性。 所以,我通过更改此代码完成了转义过程 @:myArray.push("@d.Name"); @:console.log("@d.Name"); 到 @:myArray.push("@Html.Raw(d.Name.Replace("\"", "\\\"").Replace("'", "\\'"))"); @:console.log("@Html.Raw(d.Name.Replace("\"", "\\\"").Replace("'", "\\'"))"); 然后就成功了,测试结果变成了: 到
ASP.NET Web 应用程序表单提交时出现空白页面且验证失败
在我的网络应用程序上提交表单后,我被引导到一个空白页面。正确输入详细信息后,考勤卡就会正确更新。同样,如果我取消表格,我就是
在foreach中使用asp-validation-for,无法识别字段并给出错误
我正在为我的 ASP.NET 项目使用 Razor 页面。克隆存储库后,它开始出现一个特定的构建错误: 错误(活动) CS1061 列表< CaseFileStatus > 不包含定义...
我正在尝试将我的 MVC 转换为 Razor 页面。 这是我的 MVC 示例代码 public ActionResult 注册(会员会员) { if (ModelState.IsValid) { ...
Razor函数:@helper和@functions有什么区别
关于asp.net mvc中razor功能的几个问题。 1)看下面的代码 @helper WelcomeMessage(字符串用户名) { 欢迎,@用户名。 } 然后你像这样调用它:@