编辑模板(单选按钮列表)和模型项传递到字典中的类型为[enum],但字典需要模型类型X.

时间:2012-02-24 23:13:08

标签: asp.net-mvc-3 editorfor editorformodel radiobuttonfor

环顾相似的头衔,但没有任何关键或无效。我理解为什么我会收到错误,我只想弄清楚如何修复它以使用我的EditorForModel。我收到了这个错误:

  

传递到字典中的模型项是类型的   'MyNameSpace.ViewModels.MyData + MyEnum',但是这个   字典需要类型的模型项   'MyNameSpace.ViewModels.MyData'。

我的模特:

    [UIHint("MyRadioButton")]
    public MyEnum MyRadioRadioButton { get; set; }

    //
    //
    public enum MyEnum
    {
        Choice1,
        Choice2            
    }

我正在使用[UIHint]来调用名为MyRadioButton.cshtml的EditorTemplate。现在,我的视图也使用@Html.EditorForModel调用EditorTemplate。这是调用常规模板的视图页面的一部分:

@Html.EditorForModel("BasicDetails")

两个模板都在'/ Shared / EditorTemplates /'文件夹中。

这是MyRadioButton.cshtml模板:

<td>
    <div class="radio">
        @Html.RadioButtonFor(m => m.MyRadioButton, "Choice1")<br />
        @Html.RadioButtonFor(m => m.MyRadioButton, "Choice2")
    </div>
</td>

这是BasicDetails.cshtml(由上面的@Html.EditorForModel调用):

@using MyNameSpace.ViewModels
@model MyData
<table>
    @Html.EditorFor(x => x.FirstName)
    @Html.EditorFor(x => x.LastName)
    @Html.EditorFor(x => x.MyRadioButton) //This is where my error is thrown
</table>

我想在上面的radiobuttonlist编辑器模板中避免任何复杂的事情,因为那里还有其他东西(我删除了所有多余的东西,我仍然得到错误)。我在不同的视图中多次使用特定的radiobuttonlist(这就是为什么我想模板而不是复制/粘贴)。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

从BasicDetails.cshtml中调用EditorFor作为@Html.EditorFor(x => x.MyRadioButton)

这意味着传递给EditorFor的模型类型是Enum类型。

但是在EditorFor Template(MyRadioButton.cshtml)中,我认为你已经将该类用作模型。所以错误。

因此,我们需要将 MyRadioButton.cshtml 中的模型类型更改为 MyEnum (使用命名空间)

将相同的模型传递给editorFor模板@Html.EditorFor(x=>x,"MyRadioButton")

答案 1 :(得分:0)

现在,我只是依靠EditorForModel/EditorTemplates/提取模板,而不是使用[UIHint]作为单选按钮列表,我只是插入@Html.RadioButtonFor }该模板内的组。这对我有用,可以最大限度地减少复制/粘贴。

在某些时候,我必须学会停止使用模板&gt;对于模板&gt;对于模板范例,知道什么时候足够了。 :)