【问题标题】:Updating viewmodel data in controller doesn't reflect in view's input fields在控制器中更新视图模型数据不会反映在视图的输入字段中
【发布时间】:2011-04-03 20:27:27
【问题描述】:

我有一个博文编辑页面,您可以在其中保存您的编辑或上传图片(在一个表单中多次提交)。当您上传图片时,图片链接会附加到 TinyMCE 内容区域。

表单的字段位于 viewusercontrol 中(与创建页面共享)。 viewpage 和 usercontrol 都继承自 BlogPost,因此模型直接使用 <% Html.RenderPartial("Fields", Model); %> 传递

所以这是奇怪的事情;在我的控制器中,当我将图像链接附加到文本区域时,视图中的文本区域没有任何反应

在我的视图页上,我有一个Model.Title 的标签,在用户控件中,我有一个用于编辑Model.Title 的文本框。

如果我更新控制器中的标签 - model.Title = "New Title" - 更新后的模型数据会更改为视图页中的标签而不是用户控件中的文本框。

我的控制器是这样的:

// /edit/{id}
public ViewResult Edit(int id, BlogPost model, string submit)
    {
        if (ModelState.IsValid)
        {
            switch (submit)
            {
                case "Upload":
                    var files = UploadFiles(Request.Files); // uploading works

                    model.Content += files[0].Link; // model is updated but not cascaded at runtime
                    model.Title = "Test"; // Force a title change to reproduce the issue
                    return View(model);

                default:
                    repository.Update(model);
                    break;
            }
        }

        return View(model);
    }

关于导致此问题的原因以及如何解决此问题的任何想法?谢谢。

  • 我正在使用 4.0 和 MVC 2

【问题讨论】:

    标签: asp.net asp.net-mvc viewmodel


    【解决方案1】:

    在调用 RenderPartial 之前,顶层视图中是否存在更改 Model.Title 值的代码?

    【讨论】:

    • 不,顶视图只有html表单助手,RenderPartial和Model.Title显示。
    【解决方案2】:

    事实证明,这种行为是设计使然,Phil Haack 已在此处回答:

    Possible bug in ASP.NET MVC with form values being replaced.

    这里还有一篇关于此的博文:

    ASP.NET MVC’s Html Helpers Render the Wrong Value!

    对于我的场景(将图像附加到 tinymce),我认为清除 ModelState 是安全的,因为我们明确地附加到 textarea 并且尚未进行任何验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多