2012-04-04 58 views
0

我有一个视图模型包含的一种形式:模型验证 - 检查是否值贴小于原值

@using(Html.BeginForm()) 
{ 
    @Html.EditorFor(x=>x.Price) 
    <input type="submit" value="Submit" /> 
} 

在我的控制器操作它加载这个观点,我已经设置了价格,并把它传递给风景。例如,我已经将它设置为3:

public ActionResult MyAction() 
{ 
    MyModel model = new MyModel(); 
    model.Price = 3; 
    return View(model); 
} 

我想要做的,就是当表单提交我要检查,看是否由用户提交的值小于原来的值,在这种情况3.模型验证可能吗?所以如果我输入2,那么ModelState将是无效的,但如果我输入4,它将是有效的。

回答

0

只是为了让你知道,我在我的模型上创建了一个保存原始值的新属性,然后在我的模型上实现了IValidatableObject的Validate方法中,我已经检查了新值是否小于原始值。这已经解决了我的问题

0

RemoteAttribute将是适合这个,我认为:在价格领域的顶级

[RemoteAttribute("CheckPrice", "MyController", AdditionalFields="MyModelId")] 

在控制器myController的:

public ActionResult CheckPrice(decimal price, int myModelId){ 
    //get model by id 
    //return valid or invalid 
    return Json(true, JsonRequestBehavior.AllowGet); 
} 

*编辑服务器端:

使继承RemoteAttribute的自定义属性&把在IsValid的方法相同的逻辑:

public class MyRemoteAttribute : RemoteAttribute 
{ 
    public MyRemoteAttribute() : base("CheckPrice","Kenmerk"){ 
     base.HttpMethod = "Post"; 
    } 

    public override bool IsValid(object value){ 
      //recreate validation here 
      //additionalfields can be found in HttpContext.Current.Request.Params 
      return true; 
    } 
} 
+0

除了远程验证不会重新检查服务器端帖子 – 2012-04-04 15:03:02

+0

如果您制作自定义的远程属性,您可以通过覆盖IsValid来修复此问题 – kows 2012-04-04 15:04:55

+0

是的,我想要进行服务器端验证,而不是依赖Javascript,因为它是一个外部网站,用户可能已禁用Javascript – CallumVass 2012-04-05 07:10:31

0

为什么你需要服务器每次张贴值...检查它在客户端

+0

检查客户端依赖于Javascript,在某些情况下,这可能会被禁用,所以我真的需要一个服务器端解决方案 – CallumVass 2012-04-05 07:11:17