ASP.Net mvc 3.0远程验证

发布于 2024-12-14 07:53:31 字数 1585 浏览 2 评论 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,然后他在textboxWidth中插入46,这里验证textboxWidth 失败,并且突出显示。

但是如果现在用户将 prevTextWidth 的值更改为 54 会发生什么?验证不会失败,但textboxWidth将继续突出显示且无效。使其有效的唯一方法是重新插入textboxWidth` 的值。

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

预先感谢,

马蒂亚斯

I have this problem:

I am validating a model in which the sum of 2 attributes can`t be greater than 100.
For this i am using as follow:

In my model these are my attributes:

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

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

My ValidationController has is as follow:

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;
    }

My view is the following:

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

That works fine.
The problem is the following:
Suppose that the prevTextWidth inserted by the user is 55 and he then inserts 46 in the textboxWidth, here the validation fails on the textboxWidth and it appears highlighted.

But what happens if now the user change de value of prevTextWidth to 54? The validation wont fail, but thetextboxWidthwill continue to be highlighted and not valid. The only way to make it valid is to re-insert the value oftextboxWidth`.

So is there a way to validate two attributes at the same time, and not to re-insert the second value to make it valid?

Thanks in advance,

Matias

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

誰ツ都不明白 2024-12-21 07:53:31

不幸的是,远程验证器仅使用附加字段来获取该字段的值 - 当附加字段更改时,它不会触发验证。 JQuery EqualTo(MVC 中的 CompareAttribute)执行相同的操作。

实现您想要的效果的一种方法是编写一点 JavaScript 来在附加字段更改时验证第一个字段,例如

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

Unfortunately the remote validator only uses the additional field to get the value of that field - it doesn't trigger the validation when that additional field is changed. The JQuery EqualTo (CompareAttribute in MVC) does the same thing.

One way you could achieve what you want is to write a little bit of javascript to validate the first field when the additional field is changed e.g.

 $('#PrevTextWidth').change(function () {
    $('#TextboxWidth').valid();
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文