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 が提案するようなデフォルト コンストラクターを定義するか、カスタム コンストラクターを使用してインスタンスを作成できるカスタム ModelBinder を定義することができます。

于 2013-01-17T07:51:22.087 に答える
1

ほとんどの場合、依存性注入メカニズムがあります。しかし、MVC ではコンテナを登録するための「特別な」方法が必要です。このリンクを参照してください。Unity を Web アプリケーションに追加する、パターンとプラクティス

于 2015-09-01T20:05:50.883 に答える
1

DocumentEditViewModel にはパラメーターなしのコンストラクターがありますか? これは、投稿ビューのモデルバインディングに必要だと思います。

于 2013-01-17T07:50:20.607 に答える