10

我相信这很简单,但我有点卡在这里。为我的应用定义的路由只是默认值。我定义了以下控制器。

namespace Baynes.Wedding.Web.Controllers
{
    public class AdminController : Controller
    {
        private readonly IAuthProvider _authProvider;
        private readonly IDocumentRepository _documentRepository;

        public AdminController(IAuthProvider authProvider, IDocumentRepository documentRepository)
        {
            _authProvider = authProvider;
            _documentRepository = documentRepository;
        }

        public ViewResult EditDocument(int id)
        {
            var document = _documentRepository.Select(id);

            return View(new DocumentEditViewModel(document));
        }

        [HttpPost]
        public ActionResult EditDocument(DocumentEditViewModel model)
        {
            if (ModelState.IsValid)
            {
                _documentRepository.Update(model.ToDocument());
                return RedirectToAction("ListDocuments");
            }

            return View();
        }
    }
}

当我导航到/Admin/EditDocument/1/然后第一个动作完全按预期执行时,呈现以下视图:-

<h2>@ViewBag.Title</h2>
@using (Html.BeginForm("EditDocument", "Admin", FormMethod.Post)) {
    @Html.ValidationSummary(true)
    @Html.HiddenFor(m => Model.Id)
    <div>
        @Html.LabelFor(m => Model.Title)
    </div>
    <div>
        @Html.TextBoxFor(m => Model.Title)
    </div>
    <div>
        @Html.LabelFor(m => Model.Body)
    </div>
    <div>
        @Html.TextAreaFor(m => Model.Body)
    </div>
    <div>
        @Html.LabelFor(m => Model.Url)
    </div>
    <div>
        @Html.TextBoxFor(m => Model.Url)
    </div>

    <input type="submit" value="Edit" />
}

在提交这个我得到一个错误: -

No parameterless constructor defined for this object.其他问题看似相关的问题MVC: No parameterless constructor defined for this object 这表明它与 IoC 容器没有正确设置有关,但第一个动作执行没有问题的事实肯定意味着这不是问题这里?

任何帮助将不胜感激。

问候。

西蒙

4

6 回答 6

15

添加到类 DocumentEditViewModel 默认构造函数

public DocumentEditViewModel (){}
于 2013-01-17T07:47:29.670 回答
5

MVC 框架正在尝试创建 DocumentViewModel 类的实例,但它找不到可公开访问的默认构造函数(不接受任何参数)。您可以定义像 @simplyDenis 建议的这样的默认构造函数,也可以定义一个可以使用自定义构造函数创建实例的 cusotm ModelBinder。

于 2013-01-17T07:51:22.087 回答
1

DocumentEditViewModel 是否有无参数构造函数?我相信这是在您的帖子视图上进行模型绑定所必需的。

于 2013-01-17T07:50:20.607 回答
1

很可能你有依赖注入机制。但是 MVC 需要“特殊”的方式来注册容器。查看此链接将 Unity 添加到您的 Web 应用程序、模式和实践

于 2015-09-01T20:05:50.883 回答
0

我有一个稍微不同的问题。我的模型课程之一是abstract.

于 2017-03-17T20:58:03.890 回答
0

如果 DocumentEditViewModel 构造函数的可访问性级别受到保护,您也会得到同样的错误。

于 2017-09-14T10:46:28.427 回答