【问题标题】:MVC: Editing model, extra-fieldsMVC:编辑模型,额外字段
【发布时间】:2012-09-07 23:30:11
【问题描述】:

如果被问了很多次,请不要打我。
我看过很多关于如何使用 MVC 编辑实体的精彩演示。他们希望我的编辑表单只包含 3 个字段,这些字段当然是可编辑的,因此能够在客户端和服务器之间轮换数据,直到用户最终输入正确的值。但我的应用程序有点复杂,我需要您的建议。
1) 我有一个实体 Product 具有字段 Name 和 CreatedBy
2) 唯一可编辑的字段是名称
3)如果输入不正确,我需要用最好的方式重新填充不可编辑的字段

为此,我需要从 repo 中检索业务对象并将缺失值分配给生成的视图模型。可以有很多值。我应该逐步分配它们吗?我应该使用(尝试)UpdateModel 吗?我应该使用 AutoMapper(从未尝试过)之类的东西来指定如何相互更新实体吗?为此使用了哪些常用方法?请对包含 3 个以上可编辑字段的编辑表单提供任何链接...谢谢!

【问题讨论】:

  • 我不明白你说“如果输入不正确,我需要用最好的方法重新填充不可编辑的字段。”这是否意味着您的不可编辑字段在视图中存储为隐藏字段?将您的观点和您希望在表单提交或其他方面实现的目标发送给我。
  • 它们不存储在隐藏中,但如果模型无效,那么我需要向用户返回一个包含可编辑和不可编辑值的视图。在控制器中我只得到可编辑的,我需要自己设置其他的。

标签: asp.net-mvc model-view-controller


【解决方案1】:

根据您的评论,“它们没有存储在隐藏中,但如果模型无效,那么我需要向用户返回一个包含可编辑和不可编辑值的视图。在控制器中我只得到可编辑的值,我需要亲手设置别人。”这样做的方法如下:

<HttpPost()>
Function Create(company As Company) As ActionResult

    If ModelState.IsValid Then

        db.Companies.Add(company)
        db.SaveChanges()
        Return RedirectToAction("Index")

    End If

    ' if model state is not valid
        Return RedirectToAction("MyNewAction")

End Function

如果您的模型状态无效,则发送到另一个操作(或视图,如果您愿意)。如果您需要创建一个单独的模型,您可以这样做,然后将模型与您添加的字段一起发送到新视图。

【讨论】:

  • 此操作不会将要更正的输入值返回给用户。
  • 您可以将模型(将包含输入)发送到这样的操作Return RedirectToAction("Index", New With {.id=company.CompanyId})
  • 这里的ModelState会在调用后重置。此外,还会出现不可取的 Http 302 重定向。此外,假设您有 10 个可编辑字段和 10 个不可编辑字段的编辑表单。你会全部分配吗?它们将放入 URL 字符串 :)
  • 我不太了解这个问题,所以这可能不是解决问题的最佳方法。你有 10 个可编辑的字段,为什么你有 10 个不可编辑的字段?如果它们是不可编辑的,如果表单无效,为什么要编辑它们?
  • 通常情况下,页面上显示的所有实体信息中只有少数字段可编辑。例如,在用户个人资料页面中,您可以编辑您的姓名,但您无法更改您的登录名和帐户创建日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
相关资源
最近更新 更多