@ Html.Action导致'没有为此对象定义的无参数构造函数'例外

时间:2014-07-15 20:57:58

标签: c# asp.net-mvc razor html-helper

我正在为此对象定义一个无参数构造函数'异常和罪魁祸首是我的视图中的@ Html.Action。我只想弄清楚为什么会这样。任何帮助将不胜感激。

我的控制器

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 Partial View

@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实例,当我已经通过该模型时。

3 个答案:

答案 0 :(得分:1)

我认为您需要将部分视图渲染到视图中。将模型作为参数的Html.Action没有重载。 做你想做的事的解决方案是使用像这样的Html.Partial方法:

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

答案 1 :(得分:0)

实际上,您无法使用控制器中的@Html.Action("MoreJobs", Model);绑定模型。

尝试@Html.Partial("MoreJobs", new MiniJobsView(Model)) CodeNotFound所说的内容。

答案 2 :(得分:0)

Html.Action方法想要具有路由值对象之类的数据。

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