通过Linq的MVC内部加入

时间:2011-02-07 16:31:20

标签: asp.net-mvc asp.net-mvc-3

我尝试根据此控制器操作创建产品详细信息(住宿详细信息)视图:

 public ActionResult Detail(int id)
    {

        var detail = from cities in _db.Cities
                     join properties in _db.Properties on cities.CityId equals properties.CityId
                     join proplocations in _db.PropLocations on properties.LocationId equals proplocations.LocationId
                     join proptypes in _db.PropTypes on properties.TypeId equals proptypes.TypeId
                     where properties.PropId == id
                     select new
                     {
                         cities.CityName,
                         proptypes.PropType1,
                         proplocations.Location,
                         properties.PropName,
                         properties.PropOwner,
                         properties.PropStars,
                         properties.PropAddress,
                         properties.PropDescription,
                         properties.MaxGuests,
                         properties.PropConditions,
                         properties.PropId

                     };       


        return View(detail.FirstOrDefault());

    }

因为这是我第一次尝试创建这个我不知道如何解决脚手架模板模型.. 我得到

Server Error in '/' Application.
The model item passed into the dictionary is of type '<>f__AnonymousType5`11[System.String,System.String,System.String,System.String,System.String,System.Int32,System.String,System.String,System.Int32,System.String,System.Int32]', but this dictionary requires a model item of type 'accomm2.Models.Property'. 

我的模特:Model

我的自我观点:

@model accomm2.Models.Property
     

@ {       ViewBag.Title =“细节”; }

     

详细

            属性
<div class="display-label">CityId</div>
<div class="display-field">@Model.CityId</div>

<div class="display-label">TypeId</div>
<div class="display-field">@Model.TypeId</div>

<div class="display-label">LocationId</div>
<div class="display-field">@Model.LocationId</div>

<div class="display-label">PropName</div>
<div class="display-field">@Model.PropName</div>

<div class="display-label">PropOwner</div>
<div class="display-field">@Model.PropOwner</div>

<div class="display-label">PropStars</div>
<div class="display-field">@Model.PropStars</div>

<div class="display-label">PropAddress</div>
<div class="display-field">@Model.PropAddress</div>

<div class="display-label">PropPhone</div>
<div class="display-field">@Model.PropPhone</div>

<div class="display-label">PropEmail</div>
<div class="display-field">@Model.PropEmail</div>

<div class="display-label">PropWebsite</div>
<div class="display-field">@Model.PropWebsite</div>

<div class="display-label">PropDescription</div>
<div class="display-field">@Model.PropDescription</div>

<div class="display-label">MaxGuests</div>
<div class="display-field">@Model.MaxGuests</div>

<div class="display-label">PropConditions</div>
<div class="display-field">@Model.PropConditions</div>
     

3 个答案:

答案 0 :(得分:0)

看起来你正在尝试使用LINQ投影来创建一个新类型,而不是提供它所期望的类型 - 这是一个“Property”对象。

创建一个ViewModel并重新生成页面以将其用作强类型,或将您的投影更改为

选择新的Model.Property(){ //分配变量 }

这就是我的猜测

答案 1 :(得分:0)

您的视图定义为将Property作为模型。

您尝试将其传递给匿名类型,而不是Property

您需要选择Property个实例或删除@model声明,以使视图采用动态模型。

答案 2 :(得分:0)

视图强烈绑定到“accomm2.Models.Property”,而您的“detail”对象是一个匿名对象,这就是您收到此消息的原因。

要快速测试,您可以尝试

var prop = new Property {

    // Your fields goes here

}

返回视图(道具);

这只是一个快速存根代码,但理想情况下,此转换应该在单独的层中进行。