传递到字典中的模型项的类型是....,但是此字典需要模型类型的项

时间:2019-02-04 05:45:24

标签: c# model-view-controller orchardcms-1.8

在创建新文章时,我在Ocrhard CMS v.1.8.1.0中遇到以下错误。

“ /”应用程序中的服务器错误。

传递到词典中的模型项的类型为'Contrib.ChoiceList.ViewModels.ChoiceListFieldViewModel',但是此词典需要的模型项的类型为'Contrib.ChoiceList.ViewModels.ChoiceListFieldViewModel'。 < / p>

源文件:  \ xyz.xyz.com \ orchard \ Live \ CMS \ Modules \ Orchard.News \ Views \ Content.Edit.cshtml
行:16

第16行的源错误

Line 14:         @if (Model.Content != null) {
Line 15:             <div class="edit-item-content">
Line 16:                 @Display(Model.Content)
Line 17:             </div>
Line 18:         }

场景:

当前,我们有2个Web服务器,例如Web01和Web02,这两个服务器都使用来自公共网络位置(\ xyz.xyz.com \ orchard \ Live \ CMS \ Modules)的相同代码,其中一个是Web02的Web服务器一切正常但是在另一个Web服务器Web01中,我无法创建新文章。

注意:我可以登录CMS应用程序,也可以浏览CMS应用程序,但仅在创建新文章时出现问题。

创建新文章URL:

http:// Web01 :5014 / Admin / Contents / Create / FundswireArticle-遇到错误

http:// Web02 :5014 / Admin / Contents / Create / FundswireArticle-运行正常

1

如果您看到错误消息

字典的类型为'Contrib.ChoiceList.ViewModels.ChoiceListFieldViewModel',并且字典需要类型为'Contrib.ChoiceList.ViewModels.ChoiceListFieldViewModel'的模型项

'Contrib.ChoiceList.ViewModels.ChoiceListFieldViewModel' 'Contrib.ChoiceList.ViewModels.ChoiceListFieldViewModel'

以下是 Content.Edit.cshtml 页面的代码:

@using Orchard.ContentManagement
@using Orchard.Core.Contents;


@Html.Partial("Content.SubmitButtons.OrchardNews")

<div class="edit-item">
    <div class="edit-item-primary">
        @if (Model.Content != null) {
            <div class="edit-item-content">
                @Display(Model.Content)
            </div>
        }
    </div>
</div>

下面的 Contrib.ChoiceList.cshtml 页面重写代码从Orchard Contrib.ChoiceList 模型覆盖到我的自定义模块。

@model Contrib.ChoiceList.ViewModels.ChoiceListFieldViewModel
@using System.Web.Mvc
@using FluentNHibernate.Utils
@using Orchard.Utility.Extensions;
@using SelectListItem = System.Web.WebPages.Html.SelectListItem
@{
    //this template override hides the choice list field if there's only single option specified
    var shouldDisplayField = !string.IsNullOrEmpty(Model.Options) && Model.Options.Split(';').Length > 1;
}

<fieldset style="display: @(shouldDisplayField ? "block":"none")">
    <legend>@Model.Name</legend>

    @if( Model.ListMode == "radio" )
    {
        foreach (var option in Model.Options.Split(';'))
        {
            if( string.IsNullOrWhiteSpace(option) )
            {
                <label>@Html.RadioButton("SelectedValue", "", string.IsNullOrWhiteSpace(Model.SelectedValue))<i>unset</i></label>

            }
            else
            {
                <label>@Html.RadioButton("SelectedValue", option, (option == Model.SelectedValue))@option</label>
            }
        }
    }
    else if (Model.ListMode == "dropdown")
    {
        var optionSplits = Model.Options.Split(';');
        var displayNameSplits = Model.DisplayNames.Split(';');

        var items = new List<SelectListItem>();
        for (int i = 0; i < optionSplits.Count(); i++)
        {
            var item = new SelectListItem {Text = displayNameSplits[i], Value = optionSplits[i]};
            items.Add(item);
        }

        @Html.DropDownListFor(m => m.SelectedValue, new SelectList(items, "Value", "Text",  Model.SelectedValue));
        @Html.ValidationMessageFor(m=>m.SelectedValue)
    }
    else if (Model.ListMode == "listBoxes")
    {
        var optionSplits = Model.Options.Split(';');
        var displayNameSplits = Model.DisplayNames.Split(';');
        var selectedValues = Model.SelectedValue == null ? string.Empty : Model.SelectedValue;
        Model.SelectedValues = selectedValues.Split(';').ToList();
        var items = new List<SelectListItem>();
        for (int i = 0; i < optionSplits.Count(); i++)
        {
            var item = new SelectListItem {Text = displayNameSplits[i], Value = optionSplits[i]};
            items.Add(item);
        }

        @Html.ListBoxFor(x => Model.SelectedValues, new SelectList(items, "Value", "Text", Model.SelectedValue), new { Multiple = "multiple" });
    }
</fieldset>

请帮助。谢谢你。

0 个答案:

没有答案