0

ビューの編集機能が機能しないようです。リストするページ、特定の詳細を表示するページがあり、そのページでフォームの情報を編集できるはずです。問題:アプリケーションを実行すると、次のように表示されます。このオブジェクトにパラメーターなしのコンストラクターが定義されていません。私は何を間違っているのですか...?

ホームコントローラーで私は持っています:

編集機能:

       [HttpGet]
    public ViewResult EditSchoolDetails(int id)
    {
        var institution = _educationRepository.GetInstititionById(id);

        var model = (Mapper.Map<Institution, InstitutionModel>(institution));

        return View(model);
        }

投稿[HttpPost]

public ActionResult EditSchoolDetails( InstitutionModel institutionModel, int id)
  {

       if (ModelState.IsValid)             {
 //_get from repository and add to instituion
           var institution = _educationRepository.GetInstititionById(institutionModel.Id);
       // Map from the view model back to the domain model
             var model = Mapper.Map<Institution, InstitutionModel>(institution);
           //UpdateModel(model);
       SaveChanges();
    return RedirectToAction("ViewSchoolDetails", new {institutionModel = institutionModel, id = id});

           }

return View(institutionModel);
  }

InstitutionModel

  public class InstitutionModel { 
      public InstitutionModel() { 
          NAABAccreditations = new List<AccreditationModel>(); 
      } 

      public int Id { get; set; } 
      public string Name { get; set; } 
      public bool IsNAAB { get { return NAABAccreditations.Any(); } }
      public string Website { get; set; }
      public AddressModel Address { get; set; }
      public IEnumerable<AccreditationModel> NAABAccreditations { get; set; } 
   }
4

3 に答える 3

2

Institutionクラスにはパラメーターなしのコンストラクターがありますか? そうでない場合、それが問題になります。を編集ビューに渡しているInstitutionModelため、投稿アクションもおそらく取得する必要があり、元のモデルInstitutionModelにマップすることができます:Institution

public ActionResult EditSchoolDetails(int id, InstitutionModel institutionModel)
{
    if (ModelState.IsValid)
    {
        //add to database and save changes
        Institution institutionEntity = _educationRepository.GetInstititionById(institution.Id);
        // Map from the view model back to the domain model
        Mapper.Map<InstitutionModel, Institution>(institutionModel, institutionEntity);
        SaveChanges();
        return RedirectToAction("ViewSchoolDetails",);
    }

    return View(institutionModel);
}

また、モデルの状態が有効でない場合にビュー モデルをビューに戻す方法にも注意してください。そうしないと、フォームの値がすべて失われます。

これも役立つかもしれない同様の質問です: ASP.NET MVC: No parameterless constructor defined for this object

于 2012-08-14T15:01:39.687 に答える
0

にパラメータを渡す必要がある可能性はありますViewSchoolDetailsか? コメントアウトしたreturnステートメントでIDを渡していることに気づきましたが、使用しているreturnステートメントでは何も渡していません。

編集

これ(以下のコメントから):

parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult ViewSchoolDetails(Int32)

...パラメータをViewSchoolDetailsに渡す必要があることを教えてくれます

編集2

私はあなたの編集を見て、これを言うでしょう:あなたが呼び出しているメソッドが

public ActionResult ViewSchoolDetails(InstitutionModel institutionModel, int id) 

次に、タイプのオブジェクトInstitutionModelintas パラメータを渡す必要があります。そうしないと、例外が発生します。つまり、あなたが必要です

RedirectToAction("ViewSchoolDetails", new {institutionModel = institutionModel, id = id});
于 2012-08-14T14:54:32.473 に答える
0

これを取得するたびに、ビューモデルにパラメーターのないコンストラクターを作成するのを忘れていました。必要な場合に備えて、忘れてしまった場合に備えて、常に追加しています。

InstitutionModel にはありますか?

于 2012-08-14T16:24:25.503 に答える