我對此很新,所以我確定這是做這種事情的最佳方式。基本上,我有一個搜索頁面。該頁面包含兩個下拉菜單,一個選擇要搜索的內容(例如設備名稱,接口名稱等),另一個用於選擇搜索操作符(例如「開始於」,「包含」,「等於」)。我想我最好開始看jquery,以及用於構建在validaton中的MVC。這導致我使我的模型中的所有字段都是必需的。MVC 4 - jQuery和必填字段
我還採取了爲每種類型的搜索項目放置一個文本框,並隱藏除「SearchIn」下拉列表中與所選項目對應的文本框以外的所有文本框的方法。但是,因爲每個文本框都啓用了驗證功能,如果我沒有在SearchIn下拉列表中選擇默認選項(「設備名稱」),並且我選擇了「接口名稱」 ,然後設備「DeviceName」文本框,並顯示「InterfaceName」文本框,在「InterfaceName」文本框中鍵入一個值並按搜索,它不會去任何地方,因爲即使其他文本框是隱藏的,他們仍然需要一個值。
如何禁用對隱藏的特定元素進行驗證?
所有我在我的模型字段聲明爲[必填]:
[Required]
[Display(Name = "Device ID")]
public int DeviceId { get; set; }
[Required]
[Display(Name = "Interface ID")]
public int InterfaceId { get; set; }
[Required]
[Display(Name = "InterfaceDeviceId")]
public int InterfaceDeviceId { get; set; }
[Required]
[Display(Name="Device")]
public string DeviceName { get; set; }
[Required]
[Display(Name = "Interface")]
public string InterfaceName { get; set; }
[Required]
[Display(Name = "MAC Address")]
public string MACAddress { get; set; }
[Required]
[Display(Name = "IPv4 Address")]
public string IPv4Address { get; set; }
[Required]
[Display(Name = "IPv4 Subnet Mask")]
public string IPv4SubnetMask { get; set; }
[Required]
[Display(Name = "CIDR Notation")]
public string CIDR { get; set; }
我的視圖看起來是這樣的:
@model FindDevice.Models.DeviceInterfaceModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script type="text/javascript">
$(document).ready(function() {
$('input[type=text]').hide();
var selectedOption = $('#SearchIn').find(':selected').val();
$('#' + selectedOption).show();
$('.field-validation-valid').hide();
$('#SearchIn').change(function() {
var selectedOption = $('#SearchIn').find(':selected').val();
$('input[type=text]').hide();
$('#' + selectedOption).show();
});
});
</script>
<h2>Define your Search Query</h2>
@using (Html.BeginForm("PerformSearch", "Search", FormMethod.Post))
{
@Html.ValidationSummary(true)
@Html.DropDownList("SearchIn")
@Html.DropDownList("SearchOperators");
@Html.TextBoxFor(m => m.DeviceName);
@Html.ValidationMessageFor(m => m.DeviceName)
@Html.TextBoxFor(m => m.InterfaceName);
@Html.ValidationMessageFor(m => m.InterfaceName)
@Html.TextBoxFor(m => m.MACAddress);
@Html.ValidationMessageFor(m => m.MACAddress)
@Html.TextBoxFor(m => m.IPv4Address);
@Html.ValidationMessageFor(m => m.IPv4Address)
@Html.TextBoxFor(m => m.IPv4SubnetMask);
@Html.ValidationMessageFor(m => m.IPv4SubnetMask)
@Html.TextBoxFor(m => m.CIDR);
@Html.ValidationMessageFor(m => m.CIDR)
@Html.TextBox("SearchString")
<input type="submit" value="Search" />
}