asp.net-mvc - 如何使用 ASP.NET MVC 3 在回发期间保留文本

标签 asp.net-mvc asp.net-mvc-3

我有一个产品编辑屏幕。用户可以为产品选择供应商。为此,我显示了一个 jQueryUI 对话框,允许他们浏览并选择供应商。当用户选择供应商时,我会更新页面上隐藏的 VendorID 输入,这是我页面模型的一部分。我还使用有关他们选择的供应商的详细信息更新了几个 div。这些仅用于显示目的——只需要 id 来保留选定的供应商。

这一切都工作得很好而且花花公子,除非在回发时出现错误,在这种情况下我会重新显示相同的 View 。 ModelState 负责保留我所有的表单字段(包括隐藏的 VendorID)。但是,我的带有供应商文本的 div(当然)是空的,因为它们没有发布到服务器。

我首先为我的每个供应商显示字段创建隐藏字段并将它们放在模型上。然后隐藏字段在回发后仍然存在,但这并没有解决实际在屏幕上重新显示文本的问题。

我能想到的三个选项是:

  1. 在回发时,如果出现错误,请转到数据库,使用提供的 VendorID 获取供应商,并使用我要显示的文本重新填充模型。
  2. 使用 RenderAction 并执行一个操作来呈现所选供应商的详细信息。
  3. 使用只读文本框而不是 div 来显示供应商详细信息。

这些都不是我觉得很满意的。我觉得我可能缺少一个明显的解决方案。有没有更好的解决方案?

最佳答案

我建议您不要将额外的供应商信息作为主页的一部分。创建一个 javascript 函数 showVendorInfo()。调用时,如果 VendorID 隐藏输入有值,它会通过 AJAX 获取相关的供应商信息并使用 AjaxGetVendorInfo 操作方法显示它。从两个地方调用这个函数:

  • 在 document.ready() 中
  • 在使用 jQueryUI 显示选择供应商之后。

现在,这将在一个 Action 方法中。如果您希望您的用户有延迟问题,您可以执行以下操作以避免某些 ajax 调用:在 View 中检查您是否知道 VendorID;如果是这样,调用 Html.RenderAction 从 View 调用相同的 AjaxGetVendorInfo 操作方法。

这样做的好处是它避免了我发现的一个大禁忌:在您的 ViewModel 中包括仅显示值和模型绑定(bind)值。这使得 ViewModel 非常困惑,尤其是在存在验证错误时。 [进入肥皂盒] 最好让您的 ViewModel 只具有用于模型绑定(bind)的属性,用于您的状态。将列表值、额外显示信息等放入 ViewData 或让它们通过 AJAX 显示。

关于asp.net-mvc - 如何使用 ASP.NET MVC 3 在回发期间保留文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7774908/

相关文章:

c# - 在 ASP.NET MVC 中更改 View 的布局(母版页)而不重新创建它

c# - Entity Framework : Any(. .)-从 EF5 升级到 EF6 后使用 == 过滤匹配 NULL

c# - IIS 7 上的 nHibernate,SQLClientPermissionException

jquery - MVC3 Json 模型绑定(bind)在发送到服务器时不起作用

c# - 没有 Action 的 ASP MVC 路由

asp.net-mvc - ASP.NET MVC 2 中的 Web.config 转换和额外的 Web.config 文件

templates - Knockout.js 模板未更新 dependentObservable 上的 UI 绑定(bind)

asp.net-mvc-3 - 创建不影响 session 超时的操作

sql - 如何在 Postgres 中获取过去 12 周的发票数量

asp.net-mvc - 仅将 MiniProfiler 用于调试或本地请求