【问题标题】:How to create single page search form with ajax in MVC Razor如何在 MVC Razor 中使用 ajax 创建单页搜索表单
【发布时间】:2019-06-22 18:59:20
【问题描述】:

我是 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 加载它会给我一个类似

的错误

“解析值时遇到意外字符:<.path line position>

这是 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 表单无法正常工作...加载程序不会显示。

【问题讨论】:

    标签: json asp.net-mvc razor


    【解决方案1】:
    1. 您需要将加载程序 div 移动到 Ajax.BeginForm
    2. 您还需要添加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 库。举个例子:

    BundleConfig

    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 };
    }
    

    【讨论】:

    • “resultado”div 是我试图创建类似“updatepanel”的东西。现在搜索结果显示在最后 2 个 div 上:
      Placa @Model.Name
      Last Name / Model.LastName
    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多