ASP.NET MVC / JQuery/ Javascript:搜索(并尝试加载)新数据后视图不会刷新

ASP.NET MVC / JQuery/ Javascript: view will not refresh after searching (and trying to load) new data

这是我的第一个 post Whosebug。在过去的一个月里,我一直在尝试自己解决这个问题,广泛搜索 Google 和这个网站。这是我的问题:

我有一个用户可以搜索案例的网站。当他们找到案例时,他们的结果会加载到案例详细信息页面上。用户通常通过单击搜索选项从主页搜索案例,他们在其中输入案例编号,如下所示:

14-12345

用户将他们的搜索提交给主页的索引控制器。控制器解析搜索并重定向到 "case" 操作。此操作轮询数据库以获取案例详细信息,并且 return 是案例视图。

此搜索有效 - 用户可以在个案详细信息页面上看到他们的搜索结果。但是,已收到请求,因此用户也可以从案例详细信息页面搜索案例。

我无法使新请求生效。我试过使用 Web API(这真的是浪费时间,因为我想 return 整个视图,而不仅仅是搜索数据),但我未能创建合适的 controller/view 组合来处理我的数据。我通常会尝试使用现有的控制器(具有要搜索的代码)和案例详细信息视图。

分解碎片...

索引

    if (!string.IsNullOrWhiteSpace(viewmodel.Search))
    {
        ...
        return RedirectToAction("Case", new { Year = docketnumber[0], Sequence = docketnumber[1], J = viewmodel.JudgeCode });
    }

案例

    [HttpGet]
    public ActionResult Case(int Year, int Sequence, string J)
    {
        ...various declarations and requests to get db information...

        return View(vm); //vm is a viewmodel with info for the case view
    }

    [HttpPost]
    public ActionResult Case(PortalCaseView vm)
    {
        return View(vm);
    }

* 当重定向到 Case 操作完成时,Case.cshtml 视图会加载必要的详细信息。现在需要从案例视图进行搜索,我在案例视图中添加了一个部分以进行 "on-demand" 搜索查询:

    <textarea id="searchForCase" style="width: 150px;"></textarea>
    <a class="m-btn green-stripe" href="javascript:searchCase();" style="color: #444;
            text-decoration: none;">Search<i class="icon-hdd"></i></a>

我的自定义 searchCase() 函数使用用户输入的案例编号来搜索它(它返回到原始 [ 中的索引操作) =156=] 文件):

    var searchCase = function () {
        var textArea = document.getElementById("searchForCase");
        var txt = String(textArea.value);

        jQuery.ajax({
            type: "POST",
            url: "@Url.Action("Index","Portal")",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ fromCaseSearch: txt }),
            success: function (data) {
            alert(data);
            },
            failure: function (errMsg) {
            alert(errMsg);
            }
        });

        $('form').submit();
    }

(注意:我已经尝试将数据类型从 json 更改为 html;我假设我可能需要使用内容类型)

所以,这就是我被困的地方。我试过调整一些设置(甚至认为问题可能出在 web.config 文件中),但是当我 运行 遇到这样的问题时,通常解决问题的方法是找出什么我在这里做错了(或在问题的大致范围内 - 当我首先修复简单的东西时通常会得到答案)。

最后一分钟的事情:

当然,由于这是一个工作项目,我只能提供这么多细节,但我很乐意在这一点上提出建议。

更新:我的问题是否可能是因为我没有在案例详细信息视图中包含 @using (Html.BeginForm(...)) 行?我注意到没有一个。您需要 一个能够在相关控制器中执行官方 POST 操作的吗?

另一个说明:我正在使用 Ajax/JSON 将数据从案例视图传回控制器,因为我无法将页面转到 "submit"(在 Javascript/JQuery 代码,$('form').submit() 根本不起作用)。我想知道它是否与 Web API 有任何关系。 (有一个名为 CaseNoteController.cs 的 Web API 文件处理添加到案例中的注释。当我尝试使用 Web API -并且可能 return 使用它的视图 - 我有一个测试 api 调用使案例详细信息视图页面刷新毫不费力;我只是不知道如何让它满足我的需要。)

问题已解决(我的错)。我缺乏经验使我无法早点弄清楚这一点:

  • 我最终不需要案例视图中的 searchCase 函数。原因:我没有将我的 Case 视图包装在 @using(Html.BeginForm()) 代码块中,这意味着我的页面没有 post 结果(无论我有多努力)

  • 没有关注我的PortalController.cs文件,里面已经有[=我的 Case 操作的 12=] 和 HttpPost 变体。 (HttpPost 操作完全是空的,除了返回视图。这解释了为什么页面无法加载和显示任何内容,更不用说我下一个案例搜索的结果了。)

  • 一旦我纠正了这些问题(并调整了一些其他按钮,使它们在我提交文档时不会自动 post 或尝试 运行),代码终于成功了!赞美神。不需要复杂或奇怪的路径返回控制器 - 之后事情发生得很快。

(现在 trim 关闭一大堆脚手架和其他不必要的代码...)