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 与我的案例字符串提交和 Editsubmission.submission 中的 HttpGet 具有相同的名称,Modelbinder 就会出现问题。非常感谢您详细的分步建议!

于 2012-07-02T12:58:10.930 回答