@Html.没有为这个对象定义无参数构造函数'例外

本文关键字:构造函数 参数 例外 定义 对象 @Html | 更新日期: 2023-09-27 18:13:10

我得到一个'无参数构造函数定义这个对象'异常,罪魁祸首是一个@Html。在我的视图内的动作。我只是想知道为什么会这样。如有任何帮助,我将不胜感激。

My Controller

public class AsyncController : Controller
    {
        public ActionResult Jobs()
        {
            var jobViewModel = new JobViewModel("Junior Accountant", Sector.Accountancy, DateTime.Now, "Enterprise Banking");
            return View(jobViewModel);
        }
        public ActionResult MoreJobs(JobViewModel model)
        {
            var viewModel = new MiniJobsView(model);
            return PartialView("_Rand.cshtml", viewModel);
        }
    }

工作的观点

@model SampleAsyncPartialViews.ViewModels.JobViewModel
@{
    ViewBag.Title = "Jobs";
}
<h2>@Model.Title</h2>
<h3>@Model.CompanyName</h3>
<h3>@Model.Sector</h3>
<h3>@Model.StartDate</h3>
@Html.Action("MoreJobs", Model);

_Rand局部视图

@model SampleAsyncPartialViews.ViewModels.MiniJobsView
<div>
    <h1>@Model.Title</h1>
</div>

JobViewModel

namespace SampleAsyncPartialViews.ViewModels
{
    public class JobViewModel
    {
        public JobViewModel(string title, Sector sector, DateTime startDate, string companyName)
        {
            Title = title;
            Sector = sector;
            StartDate = startDate;
            CompanyName = companyName;
        }
        public string Title { get; set; }
        public Sector Sector { get; set; }
        public DateTime StartDate { get; set; }
        public string CompanyName { get; set; }
    }
    public enum Sector 
    {
        Accountancy,
        IT,
        Marketing,
        Sales
    }
}

MiniJobsView

namespace SampleAsyncPartialViews.ViewModels
{
    public class MiniJobsView
    {
        public MiniJobsView(JobViewModel model)
        {
            Title = model.Title;
            StartDate = model.StartDate;
        }
        public string Title { get; set; }
        public DateTime StartDate { get; set; }
    }
}

我理解这个异常,我只是不明白为什么@Html。当我已经传入模型时,Action必须生成一个新的JobViewModel实例。

@Html.没有为这个对象定义无参数构造函数'例外

我认为你需要渲染你的局部视图到你的视图。Html没有重载。将模型作为参数的操作。解决方案是使用Html。像这样的部分方法:

@Html.Partial("MoreJobs", new MiniJobsView(Model))

实际上你不能在控制器中使用@Html.Action("MoreJobs", Model);绑定模型。

试试@Html.Partial("MoreJobs", new MiniJobsView(Model)) what CodeNotFound Said.

Html.Action方法希望数据像对象一样具有路由值

// Correct:
@Html.Action("MoreJobs", new { model = Model});
// Wrong:
@Html.Action("MoreJobs", Model);