首页新闻找找看学习计划

Mvc向视图传递数据出现了点问题

0
悬赏园豆:20 [已关闭问题] 关闭于 2018-11-21 11:29

楼主最近在跟着《PRO ASP.NET MVC 5》这本书学习,在实现第七章的例子的时候出线了一些问题,

此时的Controller 中List方法内容 内容:

using SportsStore.Dornain.Abstract;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SportsStore.Dornain.Entities;
using System.Web.Mvc;

namespace SportsStore.WebUI.Controllers
{
    public class ProductController : Controller
    {

        private IProductRepository repository;
        public ProductController(IProductRepository productRepository)
        {
            this.repository = productRepository;
        }
        public ViewResult List()
        {
  
           return View(repository.Products);     
        }
    }
}

View中:

@using SportsStore.Dornain.Entities
@model   IEnumerable<Product>
    @{ 
        ViewBag.Title = "Products";
 }
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title</title>
</head>
<body>
   @foreach (var p in Model)
    {
        <div>
            <h3>
                @p.Name
                @p.Description
            </h3>
            <h4>
                @p.Price.ToString("c")
            </h4>
        </div>
    }
    <div >
     @RenderBody()
    </div>
</body>
</html>

我按照提示将 Controller中的List方法传入的值改为:

 public ViewResult List()
        {
           List<Product> list = repository.Products.ToList();
           return View(list[0]);     
        }

之后报的错更让我迷茫了

视图文件的内容我是没有修改的,那么你到底要什么类型的数据?
这让我百思不得其解.
后来我把视图文件也改了

@using SportsStore.Dornain.Entities
@model   Product
    @{ 
        ViewBag.Title = "Products";
 }

这样运行倒是没有问题了,但是我需要的是传入一个集合而不是一个单独的对象,这就很难受了,希望您能帮我解答一下这个问题的所在,为什么所需要的类型会在传入类型改变之后会有这样的变化?

LiuDanK的主页 LiuDanK | 初学一级 | 园豆:29
提问于:2018-11-21 10:41
< >
分享
所有回答(3)
0

看不出什么问题,能不能搞一个可执行的demo发来看看

会长 | 园豆:5278 (大侠五级) | 2018-11-21 11:15

您好,问题得到了解决,我不了解如何上传附件,感谢您的帮助

支持(0) 反对(0) LiuDanK | 园豆:29 (初学一级) | 2018-11-21 11:30
1

IEnumerable<Product> 这个视图明显是要求new View(new IEnumerable<Product>()),很明显不能写具体[index],我无法确定你传的属性是否匹配;

你将视图改为@model Product后,明显参数对应的创建是new View(new Product()),那么传具体[index]肯定是对的。

花飘水流兮 | 园豆:10177 (专家六级) | 2018-11-21 11:21

谢谢您的解答,我虽然猜测到是这种原因,但是不知道为什么,问题得到了解决

支持(0) 反对(0) LiuDanK | 园豆:29 (初学一级) | 2018-11-21 11:30

@LiuDanK: 怎么解决的?改成什么类型了?

支持(0) 反对(0) 会长 | 园豆:5278 (大侠五级) | 2018-11-21 11:41

@会长: 我问题中的布局是_Layout.cshtml文件,然后List视图引用了这个(我也不是很清楚,创建的时候选择了使用布局?), 然后接受的时候之前我没有在 List视图中接受数据,现在添加了,就可以正常运行了,虽然我也不明白其中的原理,因为我也是刚开始了解

支持(0) 反对(0) LiuDanK | 园豆:29 (初学一级) | 2018-11-21 13:59
0

问题似乎得到了解决,因为我是按照教程在默认布局 _Layout.cshtml文件中进行显示的.而没有在List对应的视图中设置接受的类型,虽然不知道这是什么原理,但是通过在List.cshtml中设置接受的数据类型,解决了该问题

LiuDanK | 园豆:29 (初学一级) | 2018-11-21 11:29

不用mvc的razor过程(也就是说不new View),自己去实现一个razor(动态页面,aspx等都差不多,自己写个RazorRenderResult之类的)过程,然后newRazorRenderResult(??),你就明白了 。Filter等不清楚你可以这么干 —— 直接用HttpListener写个MVC过程。你会发现其实很简单的过程,对于很多情况用庞大的框架反而很复杂,很累赘,代码反而很复杂。
你实在不满http的时候,连http都不想用的时候...再往下写,你会发现通讯也不过如此,然后可以尝试如何攻击...

支持(0) 反对(0) 花飘水流兮 | 园豆:10177 (专家六级) | 2018-11-21 11:40

@花飘水流兮: 谢谢您的回复,因为我对于您说的这些不太了解,先了解您的思想哈哈

支持(0) 反对(0) LiuDanK | 园豆:29 (初学一级) | 2018-11-21 13:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册