【问题标题】:JSON List ASP.net MVCJSON 列表 ASP.net MVC
【发布时间】:2016-11-20 10:33:39
【问题描述】:

我有 /Views/Movies/Index.cshtml 与

<input type="button" id="getmoviex" value="Get moviex" />
<ul id="moviex_list"/>
 <p>
        Title: @Html.TextBox("SearchTitle") <br />
    </p>

我有 /Controllers/MoviesController.cs 和

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult moviex(string SearchGenre, string SearchTitle, string SearchActor)
    {
        var db = new CinemaContext();
        db.Configuration.ProxyCreationEnabled = false;
        var Movie = from m in db.Movie
                    select m;
        if (!String.IsNullOrEmpty(SearchTitle))
        {
            Movie = Movie.Where(s => s.Title.Contains(SearchTitle));
        }
         return Json(db.Movie.ToList(), JsonRequestBehavior.AllowGet);
    }

我有 Javascript.js 和

$(document).ready(function () {
    $('#getmoviex').click(function () {
        $.getJSON("/Movies", null, getmoviex);
    });
});

我写的 /Movies 是否正确?或者这应该是/Views/Movies?

function getmoviex(moviex) {
    $("#moviex_list").text("");
    $.each(moviex, function (i) {
        $("#moviex_list").append("<li>" + this + "</li>");
    });
}

如何显示查询中的信息或列表信息?或查看一些错误的输出?

【问题讨论】:

    标签: javascript c# jquery asp.net json


    【解决方案1】:

    首先确保您的按钮单击不会触发对服务器的请求。防止默认行为是一种标准的做法:

    $('#getmoviex').click(function (event) {
        $.getJSON("/Movies", null, getmoviex);
        event.preventDefault();
    });
    

    至于URL,不应该是查看,而是行动。你的动作是moviex,控制器是电影,所以

    $.getJSON("/Movies/moviex", null, getmoviex);
    

    其余的看起来不错,所以应该这样做。

    【讨论】:

    • 谢谢。我尝试 $(document).ready(function () { $('#getmoviex').click(function (event) { $.getJSON("/Movies/moviex", null, getmoviex); event.preventDefault(); }); }); //但这不起作用
    • 如何查看它们?我会试试的。
    • 好的,我直接启动它localhost:27161/Movies/moviex 并获取此请求已被阻止,因为在 GET 请求中使用此敏感信息可能会泄露给第三方网站。要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
    • 我重新制作了 return Json(db.Movie.ToList(), JsonRequestBehavior.AllowGet);序列化“System.Data.Entity.DynamicProxies.Movie_B1FE93473F6D1D9C6D1‌​FB5C5C23CAD32C5A4BE8‌​E694908458170AF6743A‌​A96B6”类型的对象时检测到循环引用。 ——
    • var db = new CinemaContext(); db.Configuration.ProxyCreationEnabled = false; var Movie = from m in db.Movie select m;
    【解决方案2】:

    您还需要在 url (GET) 中传递您的参数。 像这样的东西可以工作:

    $('#getmoviex').click(function(event) {
      event.preventDefault();
      $.getJSON("/Movies/moviex?SearchGenre=yuorgenre&SearchTitle=Cal&SearchActor=youractor", function(moviex) {
          var lis;
          //please check the console
          console.log(moviex);
          $.each(moviex, function(b) {
              lis += "<li id='" + b.Id + "'>" + b.Title + "</li>");
          }); document.getElementById("moviex_list").innerHTML += lis;
      });
    });

    为了避免序列化中的循环引用,您可以使用:

    if (String.IsNullOrEmpty(SearchTitle)) {
      return View("Error");
    }
    
    var db = new CinemaContext();
    var Movie = (from m in db.Movie
                Where m.Title.Contains(SearchTitle)
                select new {
                 Id = m.MovieID,
                 Title = m.Title // can add more properties
                }).ToList();
    
    return Json(Movie, JsonRequestBehavior.AllowGet);

    【讨论】:

    • 我已经为电影编写了查询,并为 json 创建了moviex。
    • 在哪个部分不起作用? Movies 控制器中的 moviex 方法是否被触发? - 尝试在方法内设置断点或尝试运行您的项目,然后在浏览器位置栏中编辑为localhost:xxxx/Movies/moviex?SearchGenre=yuorgenre&amp;SearchTitle=a&amp;SearchActor=youractor 之类的内容,看看它返回什么
    • 好的,我直接启动它localhost:27161/Movies/moviex 并获取此请求已被阻止,因为在 GET 请求中使用此敏感信息可能会泄露给第三方网站。要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
    • 我重新制作了 return Json(db.Movie.ToList(), JsonRequestBehavior.AllowGet);
    • 在序列化“System.Data.Entity.DynamicProxies.Movie_B1FE93473F6D1D9C6D1FB5C5C23CAD32C5A4BE8E694908458170AF6743AA96B6”类型的对象时检测到循环引用。
    猜你喜欢
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多