簡體   English   中英

@ Html.Action導致“未為此對象定義無參數構造函數”異常

[英]@Html.Action causing 'No parameterless constructor defined for this object' exception

我收到“為此對象定義的無參數構造函數”異常,而罪魁禍首是視圖中的@ 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);

_局部視圖

@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.Action沒有將模型作為參數的重載。 解決問題的方法是使用Html.Partial方法,如下所示:

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

實際上,您無法使用@Html.Action("MoreJobs", Model);綁定模型@Html.Action("MoreJobs", Model); 在您的控制器中。

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

Html.Action方法希望數據像具有路由值對象一樣。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM