楼主最近在跟着《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";
}
这样运行倒是没有问题了,但是我需要的是传入一个集合而不是一个单独的对象,这就很难受了,希望您能帮我解答一下这个问题的所在,为什么所需要的类型会在传入类型改变之后会有这样的变化?
看不出什么问题,能不能搞一个可执行的demo发来看看
您好,问题得到了解决,我不了解如何上传附件,感谢您的帮助
IEnumerable<Product> 这个视图明显是要求new View(new IEnumerable<Product>()),很明显不能写具体[index],我无法确定你传的属性是否匹配;
你将视图改为@model Product后,明显参数对应的创建是new View(new Product()),那么传具体[index]肯定是对的。
谢谢您的解答,我虽然猜测到是这种原因,但是不知道为什么,问题得到了解决
@LiuDanK: 怎么解决的?改成什么类型了?
@会长: 我问题中的布局是_Layout.cshtml文件,然后List视图引用了这个(我也不是很清楚,创建的时候选择了使用布局?), 然后接受的时候之前我没有在 List视图中接受数据,现在添加了,就可以正常运行了,虽然我也不明白其中的原理,因为我也是刚开始了解
问题似乎得到了解决,因为我是按照教程在默认布局 _Layout.cshtml文件中进行显示的.而没有在List对应的视图中设置接受的类型,虽然不知道这是什么原理,但是通过在List.cshtml中设置接受的数据类型,解决了该问题
不用mvc的razor过程(也就是说不new View),自己去实现一个razor(动态页面,aspx等都差不多,自己写个RazorRenderResult之类的)过程,然后newRazorRenderResult(??),你就明白了 。Filter等不清楚你可以这么干 —— 直接用HttpListener写个MVC过程。你会发现其实很简单的过程,对于很多情况用庞大的框架反而很复杂,很累赘,代码反而很复杂。
你实在不满http的时候,连http都不想用的时候...再往下写,你会发现通讯也不过如此,然后可以尝试如何攻击...
@花飘水流兮: 谢谢您的回复,因为我对于您说的这些不太了解,先了解您的思想哈哈