当我试图在JavaScript中使用它时,模型为空

时间:2016-06-04 16:56:09

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

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

这是我行动的代码。

<html>
<head>
<script type = "text/javascript">
function fruit (name, colour, image){
       this.name = name;
       this.colour = colour; 
       this.image = image;

 } 
  var apple= new fruit("Apple", "Red", "http://www.lifemartini.com/wp-content/uploads/2012/04/Apple-Fruit1.jpg");
  var banana = new fruit("Banana", "Yellow", "https://www.healthbytez.com/wp-content/uploads/2015/11/bana.jpg");
</script>
</head>

<body>
<button onclick= "myfunc()" id="button" name="button">button</button>
<section class="box special features">
      <div class="features-row">
       <section> 
        <h3 id="h31">&nbsp;</h3>
        <p id="p1">&nbsp;</p>
        <p id="p2">&nbsp;</p>
       </section>
       <section>
           <h3 id="h32">&nbsp;</h3>
           <p id="p3">&nbsp;</p>
        <p id="p4">&nbsp;</p>
       </section>
         </div>
     </section>
</body>
<script type = "text/javascript">
function myfunc(){
document.getElementById("h31").innerHTML = apple.name;
document.getElementById("p1").innerHTML = apple.colour;
document.getElementById("p2").innerHTML = apple.image;
document.getElementById("h32").innerHTML = banana.name;
document.getElementById("p3").innerHTML = banana.colour;
document.getElementById("p4").innerHTML = banana.image;
}
</script>
</html> 

我视图中的代码

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

控制台将输出&#34; null&#34; 我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

  

一旦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()。

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

希望我帮助过。

此致