json - 如何在 MVC Razor 中使用 ajax 创建单页搜索表单
问题描述
我是 MVC / Razor 方面的初学者......基本上我有 2 个页面仅用于显示我正在使用 Json 的 API 的搜索结果。
Index.cshtml:(只是一个表格)
@model ConsultaInterna.Models.SearchApi
<div class="jumbotron">
<h2>Consulta Interna</h2>
Placa
@using (Html.BeginForm("Search", "Home"))
{
<input asp-for="Model.Name" class="form-control" name="name" id="txtName" />
<input class="form-control" type="submit" id="ok" />
}
和 Search.cshtml (也有表单。我只想离开这个页面,现在我不能,因为如果我直接从 Search.cshtml 加载它会给我一个错误,比如
“解析值时遇到意外字符:<。路径'',第 0 行,位置 0。”(显然是因为我正在尝试使用空搜索加载标签)
这是 Search.cshtml
@model ConsultaInterna.Models.SearchApi
<div id="loader" class="spinner" style="display:none">OIE</div>
<div class="header formPesquisa">
@using (Ajax.BeginForm("Search", new AjaxOptions()
{
HttpMethod = "POST",
LoadingElementId = "loader",
UpdateTargetId = "resultado"
}))
{
<input placeholder="Placa" asp-for="Model.Name" name="name" id="txtName" width="30" />
<input class="pesquisa" type="submit" id="enviar" value="Ok" />
}
<div class="panel">Placa @Model.Name</div>
<div class="panel">Last Name / Model.LastName</div>
还重要的是,Ajax 表单无法正常工作......加载程序不会出现。
解决方案
- 您需要将加载程序 div 移动到
Ajax.BeginForm
. 您还需要添加
resultado
div 以显示您的结果。@using (Ajax.BeginForm("Search", "Home", new AjaxOptions() { HttpMethod = "POST", LoadingElementId = "loader", UpdateTargetId = "resultado" })) { <div id="loader" class="spinner" style="display:none">OIE</div> <input placeholder="Placa" asp-for="Model.Placa" class="pesquisa placa" maxlength="7" name="placa" id="txtPlaca" width="30" /> <input placeholder="CPF" asp-for="Model.CPF" class="pesquisa cpf" maxlength="11" name="cpf" id="txtCPF" /> <input class="pesquisa" type="submit" id="enviar" value="Enviar" /> <div id="resultado"></div> } <div class="panel">Placa @Model.Name</div> <div class="panel">Last Name / Model.LastName</div> </div>
您还需要确保已将相关引用添加到特定的不显眼的 ajax 库。举个例子:
捆绑配置
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive-ajax.min.js",
"~/Scripts/jquery.validate*"));
_layout.cshtml
@Scripts.Render("~/bundles/jqueryval")
示例控制器动作
[HttpPost]
public ActionResult Search(string placa, string cpf)
{
return new JsonResult { Data = "found", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
推荐阅读
- docker - 无法使用覆盖网络在另一台主机上 ping docker 容器
- python - 如何将 pandas df 每一列中的所有行绘制到单独的条形图中
- python - 使用 dask 的 from_array 函数关闭文件
- git - 是否有 git 命令将文件添加到 .git/info/exclude
- swift - 当用户快速结束(终止)应用程序时删除所有待处理的通知
- ios - GeometryReader 在 SwiftUI 中占用额外空间
- reactjs - 为什么我可以使用 IP 地址从 React 应用程序调用 api 端口,但当我使用“localhost”时不能
- javascript - 为什么 PHP AJAX 只能从第二次单击开始工作?
- d3.js - D3:scale.domain 不是函数
- javascript - 在履行承诺时避免显示元素