2011-11-09 86 views
2

我有这样的问题:ASP.Net MVC 3.0远程验证

我确认其中的2个属性的总和`吨大于100 对于此我使用如下模型:

在我的模型,这些都是我的属性:

[Remote("ValidatePrevTextWidth", "Validation", AdditionalFields = "TextboxWidth")] 
    public int PrevTextWidth { get; set; } 

[Remote("ValidateTextboxWidth", "Validation", AdditionalFields = "PrevTextWidth")] 
    public int TextboxWidth { get; set; } 

我ValidationController有情况如下:

public JsonResult ValidatePrevTextWidth(int PrevTextWidth, int TextboxWidth) 
    { 
     bool valid = AreValid(PrevTextWidth, TextboxWidth); 
     return Json(valido, JsonRequestBehavior.AllowGet); 
    } 

public JsonResult ValidateTextboxWidth(int TextboxWidth, int PrevTextWidth) 
    {    
     bool valid = AreValid(PrevTextWidth, TextboxWidth); 
     return Json(valido, JsonRequestBehavior.AllowGet); 
    } 

private bool AreValid(int prevTextWidth, int textboxWidth) 
    { 
     return (prevTextWidth + textboxWidth)<=100; 
    } 

我的看法如下:

@using (Html.BeginForm("Index", "Pregunta", FormMethod.Post, new { id = "frmNewPreguntaDesign" })) 
{ @Html.TextBoxFor(m => m.PrevTextWidth) 
    @Html.TextBoxFor(m => m.TextboxWidth) 
} 

工作正常。 的问题如下: 假设由用户插入的prevTextWidth55,然后他插入46textboxWidth,这里的验证在textboxWidth失败,它会突出显示。

但是,如果现在用户将prevTextWidth的值更改为54,会发生什么情况?验证赢得了t fail, but the textboxWidth will continue to be highlighted and not valid. The only way to make it valid is to re-insert the value of textboxWidth`。

那么有没有办法在同一时间验证两个属性,而不是重新插入第二个值使其有效?

由于提前,

马蒂亚斯

回答

0

不幸的是远程验证只使用附加字段来获取字段的值 - 时附加字段发生变化,也不会触发验证。 JQuery EqualTo(MVC中的CompareAttribute)做同样的事情。

你可以实现你想要的一种方法是编写一点javascript来验证第一个字段,当附加字段被改变时,例如,

$('#PrevTextWidth').change(function() { 
    $('#TextboxWidth').valid(); 
}); 
+0

感谢您的快速响应。我已经尝试过了。 $(“#PrevTextWidth”)。change(function(){ alert(“here”); $('#TextboxWidth')。valid(); });'第一次改变PrevTextWidth时,它验证这两个属性。但以下时间只验证PrevTextWidth字段。警报消息始终显示。任何想法为什么会发生?谢谢 –

+0

正确的主意,但不幸的是这不会做这项工作。关闭,但看看这里从@Kiff的完整答案http://stackoverflow.com/questions/10163683/remote-validation-mvc-3-0-multiple-fields-validation – MemeDeveloper