Asp.net MVC4 @ Html.EditorFor .Where()属性

时间:2013-09-20 05:53:08

标签: asp.net-mvc linq mvc-editor-templates

在我看来,我使用的是editortemplate,如下所示:

edit.cshtml

@model NetasCrm.Models.CRM_OPP_DETAILS 

<table class="table table-hover">
<thead>
    <tr>
        <th>Çözüm</th>
        <th>Üretici</th>
        <th>Tarih</th>
        <th>Tutar</th>
        <th>Sil</th>
    </tr>
</thead>
    <tbody>
        @Html.EditorFor(model => model.CRM_SOLUTION_DISTRIBUTION, new { Solutions = ViewBag.Solutions, Vendors = ViewBag.Vendors })
        @Html.HiddenFor(model => model.ID)         
    </tbody>
</table>

它正在工作,但我正在尝试做一些事情(添加where子句。)如下所示为我的模型中的一些项目创建一个编辑器模板。

@Html.EditorFor(model => model.CRM_SOLUTION_DISTRIBUTION.Where(p=>p.AMOUNT != 0), new { Solutions = ViewBag.Solutions, Vendors = ViewBag.Vendors })

我收到以下错误:

  

模板只能用于字段访问,属性访问,   单维数组索引或单参数自定义索引器   表达式。

2 个答案:

答案 0 :(得分:3)

不应该使用@Html.EditorFor()的方式,错误信息明确说明。

要渲染您想要的内容,您可以使用Html.Partial(),也可以在模型中创建单独的属性,然后将Where移动到它的getter。

答案 1 :(得分:1)

Html.XxxFor期望一个lambda表达式从模型中选择一个属性。这用于标识将要编辑的模型的属性。

您尝试实现的目标可能就是使用编辑器模板可以实现的目标。

有关编辑器模板及其实施的有趣文章:

在第二篇文章中,您可以看到,如果您有一个包含要编辑的数据的自定义类,则可以创建一个模板,如果您为其编辑正确的名称并将其保存在右侧,则该模板会自动用于编辑器地点。您可以使用单个字段创建一个类,并将其包含在模型中而不是原始属性中。这也允许一次编辑多个属性(声明具有这些属性的类)

其他选项是自定义html助手: