2

我有一个数据输入表单,它设置了远程验证来检查数据库中某个字段的现有值。

这是发生的事情:

  1. 转到创建页面(数据输入表单)。为字段输入值 X。

  2. 场失去焦点。调用远程验证。Fiddler 显示呼叫。

  3. 单击保存。记录被保存;页面切换到索引页面。

  4. 再次转到创建页面。再次为字段输入值 Y。

  5. 场失去焦点。调用远程验证(每个 Fiddler)。

  6. 单击保存。记录被保存;页面切换到索引页面。

  7. 再次转到创建页面并输入 X(再次)作为字段。

  8. 场失去焦点。什么都没发生。不调用远程验证(每个 Fiddler)。

  9. 单击保存。不调用远程验证。页面尝试保存记录,但数据库将其吐回。

就好像创建页面记住了该字段的先前值也是 X,并且没有重新验证它,因为它没有改变,即使我在此期间去过其他页面。

我没有将模型传递给 Create 视图:我无法想象它是从哪里得到的,即该字段具有正在(或未)更改的先前值。

据我所知,OutputCache没有被使用。如果重要的话,我在 IE 8 上。

4

1 回答 1

4

好的,我想我已经想通了。不仅仅是你不能使用 OutputCache 来缓存你的结果,你必须明确地说不缓存你的验证结果。有关说明和示例,请参见此处。

ETA:可能发生的另一件事是,如果第一次远程验证调用失败(如返回 500 错误),它将不会再次被调用。因此,如果您预计您的验证例程会不时使用空数据调用(因为您的字段尚未填写),您需要使参数为空并在您的验证代码中说明这一点。

于 2011-11-08T18:33:35.540 回答