0

私の質問はこの質問と回答に関連しています

次の複雑なモデル:

public class EditSubmissionModel
{
    public string foo { get; set; }
    public Submission submission { get; set; }
}

シンプルなモデル

[Table(Name = "Submission")]
public class Submission
{
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public int SubmissionId { get; set; }
    [Column]
    public string Title { get; set; }
}

景色:

@model Project.WebUI.Models.EditSubmissionModel
@{
  ViewBag.Title = "editSubmission";
}

<h2>editSubmission</h2>
@using (Html.BeginForm())
{
    <legend>SubmissionModel</legend>

    @Html.EditorFor(m => m.foo)
    @Html.EditorFor(m => m.submission)

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

エディターテンプレート

@model Project.Domain.Entities.Submission
@Html.EditorFor(m => m.Title)

コントローラー

    [Authorize]
    [HttpPost]
    public ActionResult editSubmission(string shortName, EditSubmissionModel model)
    {
      shortname = "second" (is ok)
      model.foo = aaa (also ok i edited it on the view)
      model.submission = null (not binded? or i dont know?)

エラーが表示されません。アイデアはありますか?

4

2 に答える 2

2

状態再現なし。手順:

  1. 既定のテンプレートを使用して新しい ASP.NET MVC 3 アプリケーションを作成する
  2. 2 つのモデルを定義します。

    public class Submission
    {
        public int SubmissionId { get; set; }
        public string Title { get; set; }
    }
    
    public class EditSubmissionModel
    {
        public string foo { get; set; }
        public Submission submission { get; set; }
    }
    
  3. HomeController次のように変更します。

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        [HttpPost]
        public ActionResult Index(string shortName, EditSubmissionModel model)
        {
            return Content(model.submission.Title);
        }
    }
    
  4. ~/Views/Home/Index.cshtml次のようにビューを更新します。

    @model EditSubmissionModel
    @using (Html.BeginForm())
    {
        <legend>SubmissionModel</legend>
    
        @Html.EditorFor(m => m.foo)
        @Html.EditorFor(m => m.submission)
    
        <input type="submit" value="Save" />
    }
    
  5. Submission次のように、タイプ ( ~/Views/Home/EditorTemplates/.cshtml)のカスタム エディター テンプレートを追加します。

    @model Submission
    @Html.EditorFor(m => m.Title)
    
  6. を押しCtrl+F5て、フォームに入力して送信します。テキストボックスに入力した値はTitle正しくバインドされ、画面に表示されます。

ですから、コメント セクションですでに尋ねた質問を繰り返します。あなたはそれがあなたのコードからのコピーと貼り付けだと答えましたが、私があなたに説明したように(完全なステップバイステップガイドで)、そうではありません.

ここで、私が持っている疑いがあります。実際の POST アクションは次のようになります。

public ActionResult editSubmission(string shortName, EditSubmissionModel submission)

このようではありません:

public ActionResult editSubmission(string shortName, EditSubmissionModel model)

パラメータ名に注意してください。

于 2012-07-02T08:54:04.450 に答える
0

@Darin Dimitrovあなたは完全に正しかった、私は何を違うのですか。上記のコードは完全に問題ありませんでした。問題は、次のような get コマンドでした。

[Authorize]
public ActionResult editSubmission(string confShortName, string submission)
{
  //do stuff
  return View();
}

また、httpPost のどこかに HttpGet のような同じ名前がある場合、Modelbinder は問題を起こします。詳細なステップバイステップのアドバイスに感謝します!

于 2012-07-02T12:58:10.930 に答える