代码之家  ›  专栏  ›  技术社区  ›  Hiroco

传递到ViewDataDictionary的模型项的类型为“x”,但此ViewDataDictionary实例需要类型为“y”的模型项

  •  2
  • Hiroco  · 技术社区  · 10 月前

    我在以下位置有文件:

    Views/Journals/AddOrEdit.cshtml
    Views/Trades/AddOrEdit.cshtml
    

    我想在交易视图中呈现日记视图。


    当运行以下代码时,我收到错误消息(如下):

    await Html.PartialAsync("AddOrEdit", Model.Journal);
    

    InvalidOperationException:传递到ViewDataDictionary的模型项的类型为“” TradeJournal.Models.Journal ',但此ViewDataDictionary实例需要类型为'的模型项 TradeJournal.Models.Trade '.


    这是我的 交易控制器cs :

    // GET: Trades/Details/{Id}
    public async Task<IActionResult> Details(int? id)
    {
        // nie znaleziono/istnieje id 
        if (id == null) return NotFound();
        
    
        var trade = await _context.Trades
            .FirstOrDefaultAsync(m => m.Id == id);
    
        //nie znaleziono trade
        if (trade == null) return NotFound();
         
        //podlaczanie notatki pod trade
        var journal = new Journal
        {
            TradeId = trade.Id
        };
    
        //tworzenie viewModelu
        var viewModel = new TradesJournalsViewModels
        {
            Trade = trade,
            Journal = journal
        };
    
        
       //zwracamy oba
        return View(viewModel);
    }
    

    这是 Journals/AddOrEdit.cshtml :

    @model TradeJournal.Models.Journal
    
    @{
        ViewData["PageTitle"] = "Journals";
        ViewData["PageActionText"] = "+ Add note";
        ViewData["PageActionUrl"] = "/Journals/AddOrEdit";
    
        var tools = new[] {
            "Bold", "Italic", "Underline", "StrikeThrough",
            "FontName", "FontSize", "FontColor", "BackgroundColor",
            "LowerCase", "UpperCase", "|",
            "Formats", "Alignments", "OrderedList", "UnorderedList",
            "Outdent", "Indent", "|",
            "CreateLink", "Image", "CreateTable", "|", "ClearFormat", "Print",
            "SourceCode", "FullScreen", "|", "Undo", "Redo"
        };
    }
    
    
    <h4>Journal</h4>
    <hr />
    <div class="row d-flex justify-content-center align-items-center ">
        <div class="col-md-7">
            <form asp-action="AddOrEdit">
                <div asp-validation-summary="ModelOnly"  class="text-danger"></div>
                <input type="hidden" asp-for="Id" />
    
                <div class="mb-3 w-100">
                    <ejs-richtexteditor id="Text" value="@Model.Text">
                        <e-richtexteditor-toolbarsettings items="tools"></e-richtexteditor-toolbarsettings>
                    </ejs-richtexteditor>
                    <span asp-validation-for="@Model.Text" class="text-danger"></span>
                </div>
      
                <div class="mb-3 ">
                    <label asp-for="TradeId" class="control-label"></label>
                    <select asp-for="@Model.TradeId" class ="form-control" asp-items="ViewBag.TradeId"></select>
                </div>
                <div class="mb-3">
                    <ejs-button cssClass="w-100" id="submit" type="submit" content="Submit"></ejs-button>
                </div>
            </form>
        </div>
    </div>
    
    <div>
        <a asp-action="Index">Back to List</a>
    </div>
    
    @section Scripts {
        @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    }
    
    

    我试着尝试一下:

    using Microsoft.AspNetCore.Mvc;
    using TradeJournal.Models;
    
    
    namespace TradeJournal.ViewModels
    {
        public class TradesJournalsViewModels
        {
            public Trade Trade { get; set; }
            public Journal Journal { get; set; }
    
        }
    }
    
    

    但这并没有帮助我,错误仍然在发生。

    1 回复  |  直到 10 月前
        1
  •  2
  •   Dai    10 月前

    它用错了 .cshtml 查看文件,因为 AddOrEdit (没有进一步的资格)最初的比赛 ~/Views/Trades/AddOrEdit.cshtml 哪个ASP。NET认为与当前视图上下文“更接近” ~/Views/Journals/AddOrEdit.cshtml ...

    因此,更改视图名称参数Action以指定明确的路径,如下所示:

    await Html.PartialAsync( "~/Views/Journals/AddOrEdit.cshtml", this.Model.Journal );