如何根据标签更改验证消息

时间:2015-01-25 01:20:26

标签: c# asp.net-mvc

我有一个' VehiclePrice'我的模型中的字段,我正在使用不同的标签。我有3个不同的' div,其中只有一个将根据' Car',' Truck'或' SUV&#的下拉选项显示39 ;.标签是"轿车价格","卡车价格"和" SUV价格"。我是MVC的新手,作为一个数据库人,我不喜欢创造3个不同的领域来保持同样的东西 - " Price"。我需要Validation消息来指示特定标签,当它吐出"必需"或者"范围"消息,即" 汽车价格是必需的"," 卡车价格必须介于10000和900000之间"等,而不是只需"价格是必需的"。为什么?因为还有其他的" Price"标签在同一个' div'。 我的指示是我需要使用@Html验证的东西,这似乎很难修改。 是否有一种简单的方法可以覆盖消息,或至少预先添加或附加" Car"," Truck"或" SUV"对吗?或者也许是一种覆盖某些数据的方法 - - - '属性。

2 个答案:

答案 0 :(得分:1)

首次呈现视图时,jquery-validate会解析验证消息。您可以根据所选的车辆类型更改data-val-*属性的相关VehiclePrice属性,然后重新解析验证程序。假设选择的html是

<select id="vehicletype">
  <option value="Car">Car</option>
  <option value="Truck">Truck</option>
</select>

然后是剧本

$('#vehicletype').change(function() {
  // Update error message
  var message= 'The ' + $(this).val() + ' price is required';
  $('#VehiclePrice').attr('data-val-required', message);
  // Reparse validator
  $('form').data('validator', null);
  $.validator.unobtrusive.parse($('form'));
});

请注意,您还需要在回发后检查车辆类型,并在返回视图时调整ModelState错误消息

答案 1 :(得分:0)

我会在您的视图模型中添加一个Vehicle Type属性,并在视图中使用bool变量将文本框设置为在document.ready事件中通过JQuery启用或不启用。如果disabled变量为false,则将忽略文本框的验证。对于每种车型div,请使用以下代码。

@Html.TextBoxFor(r => r.VehiclePrice, new { @type = "range", min = 10000, max = 15000 }, disabled)  
@Html.ValidationMessageFor(r => r.VehiclePrice,"Price must be between 10000 and 15,000")