“IEnumerable <samplemodel> model”值填充到另一个模型

时间:2015-11-04 06:26:00

标签: c# asp.net-mvc linq razor asp.net-mvc-5

我有以下控制器方法来获取作为IEnumerable<samplemodel> model

参数的数据
    [HttpGet]
    public ActionResult Create_Template(IEnumerable<ProductsPropertiesVM> model)
    {
        return View(...);
    }

这是ProductsPropertiesVM模型类

public class ProductsPropertiesVM
{


    public int Property_ID { get; set; }
    public string Property_Title { get; set; }
    public string Property_Value { get; set; }
    public bool IsChecked { get; set; }

    public string Product_Name { get; set; }       
    public string Product_Description { get; set; }       
    public string Prodcut_Features { get; set; }
    public string Unique_Selling_Propositions { get; set; }        
    public string Business_Case_Feasibity_Study { get; set; }
    public string Sharia_Resolution_and_Requirement_for_Product { get; set; }
    public string Approved_Accounting_Entries { get; set; }
    public string Listing_of_Risk_Related_Procedures { get; set; }
    public string Legal_Requirement { get; set; }
    public string Listing_of_Internal_Procedures_for_Review { get; set; }
    public string Product_Statistics_Targeted_Segment { get; set; }
    public string Product_Statistics_Sales_Volume { get; set; }
    public string Product_Statistics_Profitability { get; set; }
    public string Product_Statistics_Annual_Growth_Rate { get; set; }
    public string Relevent_Case_Studies { get; set; }

}

到这个控制器,数据传递如下图像

图片一:10个元素[0-9个索引]

enter image description here

图像二:第0个索引元素的属性

enter image description here

我想选择这个0-9索引元素的IsChecked属性True的有限元素属性,并将其返回

分配有限元素的属性我创建了另一个模型类,如下面的

public class TemplateProperties
{
    public int Property_ID { get; set; }
    public string Property_Title { get; set; }
    public string Property_Value { get; set; }
    public bool IsChecked { get; set; }
}

然后我尝试做下面的事情

方法1:

    [HttpGet]
    public ActionResult Create_Template(IEnumerable<ProductsPropertiesVM> model)
    {

        IEnumerable<BrochureTemplateProperties> sample = model.Where(y => y.IsChecked).Select(y => new
        {
            sample.IsChecked = y.IsChecked,
            sample.Name = y.Property_Title,
            sample.PropertyValue = y.Property_Value

        });

        return View(sample);
    };

但这会导致编译错误

方法2:

    [HttpGet]
    public ActionResult Create_Template(IEnumerable<ProductsPropertiesVM> model)
    {

        var sample = model.Where(y => y.IsChecked).Select(y => new
        {
            IsChecked = y.IsChecked,
            Name = y.Property_Title,
            PropertyValue = y.Property_Value

        });

        return View(sample);
    };

但是这种方法一旦我转到视图模型值没有绑定到TemplateProperties模型,

我该怎么做才能纠正这个

修改

一旦我使用@Rahuls解决方案,几乎所有的编译错误消失了,然后我创建了详细信息视图,但是一旦我运行它就会得到一个像这样的错误页面

enter image description here

2 个答案:

答案 0 :(得分:4)

您的方法1是正确的,因为您正在预测anonymous类型并将其存储在IEnumerable<BrochureTemplateProperties>中,因此您收到错误。只需像这样预测BrochureTemplateProperties类型: -

 IEnumerable<BrochureTemplateProperties> sample = model.Where(y => y.IsChecked)
        .Select(y => new BrochureTemplateProperties
        {
            IsChecked = y.IsChecked,
            Name = y.Property_Title,
            PropertyValue = y.Property_Value
        });

<强>更新

好的,所以你的View期待Models.BrochureTemplateProperties,但是你正在传递IEnumerable<BrochureTemplateProperties>,所以你需要获取第一个匹配的对象。只需在结尾添加FirstOrDefault: -

 .Select(y => new BrochureTemplateProperties
            {
                IsChecked = y.IsChecked,
                Name = y.Property_Title,
                PropertyValue = y.Property_Value
            }).FirstOrDefault(); //here

答案 1 :(得分:0)

试试这个 -

var sample = model.Where(y => y.IsChecked).Select(y => new
    {
        IsChecked = y.IsChecked,
        Name = y.Property_Title,
        PropertyValue = y.Property_Value

    }).ToList<BrochureTemplateProperties>();