【问题标题】:ASP.NET Core MVC - Getting data and handling 404 in same viewASP.NET Core MVC - 在同一视图中获取数据和处理 404
【发布时间】:2019-12-20 07:04:49
【问题描述】:

我对 WebForms(我的公司使用的)比较熟悉,并且刚刚开始学习 MVC。我按照电影教程进行操作,并且很难看到如何以我想要的方式使用 MVC 模式。

例如,我的公司经常要求我制作一些网络应用程序,这些应用程序从用户那里获取一些输入,在我们的数据库中查找它,然后将与输入相关的一些其他数据返回给他们,所有这些都在同一个页面上。

使用 WebForms,我可以轻松查看数据库是否返回 null 并在这种情况下显示错误标签。但是,由于 MVC 将数据访问视为 API,我不知道如何在不忽略使用正确 404 代码的情况下做同样的事情。假设我想查找一部电影(我暂时将 404 注释掉了):

public class MoviesController : Controller
 {
    private readonly MovieDBContext _context;

    public MoviesController(MovieDBContext context)
    {
        _context = context;
    }

    // GET: Movies/Info/Title
    public async Task<IActionResult> Info(string title)
    {
        //if (title == null)
        //{
            //return NotFound();
        //}

        var movie = await _context.Movies
            .FirstOrDefaultAsync(m => m.Title == title);
       // if (movie == null)
       // {
           // return NotFound();
        //}

        return Json(movie);
   }

然后在视图中:

<h2>App</h2>
<br />
<div class="form-group">
    <p>
        Price Lookup App
    </p>
    <br />
    <div class="row">
        <div class="col-xs-2">
            Enter movie title:
        </div>
        <div class="col-xs-2">
            <input type="text" class="form-control" id="title" />
        </div>
        <div class="col-xs-2">
            <input type="submit" class="btn" onclick="getMovie()" />
        </div>
    </div>
    <br />
    <div class="row">
        <label id="price"></label>
    </div>
</div>

<script>
    function getMovie() {
        var movie = $("#title").val();
        if (movie != "") {
            $.getJSON("../Movies/Info?title=" + movie, function (response) {
                if (response != null) {
                    $("#price").html(response.price);
                }
                else {
                    $("#price").html("Film not found");
                }
            });
        }
        else {
            $("#price").html("Film not found");
        }
    }
</script>

这在技术上是可行的,但我觉得我真的不应该这样做。找不到电影时,我应该提供 404 代码,对吗?我只是不知道如何处理获取 404 响应并在上面的同一视图上显示自定义“未找到”消息,因为 404 停止执行 JS。谢谢。

【问题讨论】:

  • getJSON 应该只是 $.ajax 函数的包装函数 - 这意味着您可以将 .fail() 函数链接到它上面。不是我可以添加示例的地方,或者我会。不过,这是文档:api.jquery.com/deferred.fail
  • 你为什么说你应该给404?似乎您处理得当。我想如果它是一个网络 API 或者你可能想要一个 404 的东西。
  • 如果你愿意,你可以从控制器和你的 .get add , ").fail(function (jqXHR, textStatus, error) { // 现在你返回 404(抛出 404 http 异常)可以显示原始错误或 $("#price).html("Film not found"); });

标签: c# jquery asp.net asp.net-mvc http-status-code-404


【解决方案1】:

您可以使用 $.ajax(ajax 调用)或 $.get(get api 调用)。有成功和错误的组成部分。你可以在那里处理响应

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 2016-07-29
    • 2019-08-07
    • 2022-06-23
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多