【问题标题】:Model is null when I'm trying to use it in JavaScript当我尝试在 JavaScript 中使用模型时,模型为空
【发布时间】:2016-06-04 16:56:09
【问题描述】:

我的应用架构是 ASP.Net MVC 我正在尝试使用实体框架 ORM 从 mssql 服务器传递一些数据。

这是我操作的代码。

public ActionResult Create()
    {
        List<object> myModel = new List<object>();

        var places = db.Places.Where(p => p.UserId == User.Identity.GetUserId());

        myModel.Add(places);
        myModel.Add(new Place());

        ViewBag.UserId = new SelectList(db.AspNetUsers, "Id", "UserName");
        return View(myModel);
    }

我认为的代码

@model IEnumerable<object>

@{
    List<WhereWeDoIt.Models.Place> places = Model.ToList()[0] as List<WhereWeDoIt.Models.Place>;
    WhereWeDoIt.Models.Place place = Model.ToList()[1] as WhereWeDoIt.Models.Place;
    ViewBag.Title = "Create";
}

...

<script type="text/javascript">
//Users data
var json = @Html.Raw(Json.Encode(places));

console.log("Places test " + json);
</script>

...

控制台将输出“null” 我做错了什么?

【问题讨论】:

  • 尽可能使用视图模型!

标签: javascript c# .net asp.net-mvc entity-framework


【解决方案1】:

一旦 Html.Raw 会得到字符串并直接放在 html 中,试试 将@Html.Raw 放在单引号之间,例如:

var json = '@Html.Raw(Json.Encode(places))';

问候,

我上面提供的解决方案会将 json 设置为 json 字符串(不是对象),因此无法正常工作,对此感到抱歉。下面是解决方案(在我的机器上模拟测试)

嗯,我们这里有一些事情要发生。

我已经在代码中取得了成功:

@model IEnumerable<object>

@{
var places = Model.ToList()[0];
HypothesisWebMVC.Models.Place place = Model.ToList()[1] as HypothesisWebMVC.Models.Place;
ViewBag.Title = "Create";
}

<script type="text/javascript">
//Users data
var json = @Html.Raw(Json.Encode(places));

console.log("Places test " + json);
</script>

此代码会将 json 变量设置为一个对象(在控制器中设置的地点列表)。

我不知道你的目标是什么,但我在上面发布的代码会起作用。

一些注意事项:

在动作中,当你这样做时:

    List<object> myModel = new List<object>();

    var places = db.Places.Where(p => p.UserId == User.Identity.GetUserId());

    myModel.Add(places);
    myModel.Add(new Place());

您正在创建一个 myModel,它将在 Place 的第一个位置和列表(或 IQueryable)中,在第二个位置有一个位置(不是列表),因此您无法将整个模型转换为列表.

你可以使用:

List<WhereWeDoIt.Models.Place> places = Model.ToList()[0] as List<WhereWeDoIt.Models.Place>;

通过,添加到模型时,在插入之前执行 .ToList()。

考虑使用视图模型(为视图创建的特定对象)

希望我有所帮助。

问候,

【讨论】:

  • {"在序列化类型为 'System.Data.Entity.DynamicProxies.Place_084A987E8F6FBE574A22E813FE314F2894AF728F244BDD6582AF50929FF1161D' 的对象时检测到循环引用。"}
  • 我已经更改了解决方案(编辑过的答案),看看。问候。
【解决方案2】:

我测试你的代码。像这样编辑视图:

List<WhereWeDoIt.Models.Place> places = Model.ToList() as List<WhereWeDoIt.Models.Place>;

Model.ToList()[0] 不是列表。

【讨论】:

  • CS0039:无法通过引用转换、装箱转换将类型“System.Collections.Generic.List”转换为“System.Collections.Generic.List”,拆箱转换、包装转换或空类型转换
  • 我用这段代码变成了List。 console.log("Places test" + json) 显示地方 json.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
相关资源
最近更新 更多