Я попробовал работать tnx @Anastasiosyal, я хочу поделиться им с этим потоком.
Я не уверен, как поля ввода не запускались, когда я опустошал поля. Но мне удалось вызвать каждое обязательное поле индивидуально, используя:
$(".setting-p input").bind("change", function () {
//Seven.NetOps.validateSettings(Seven.NetOps.saveSettings);
/*$.validator.unobtrusive.parse($('#saveForm'));*/
$('#NodeZoomLevel').valid();
$('#ZoomLevel').valid();
$('#CenterLatitude').valid();
$('#CenterLongitude').valid();
$('#NodeIconSize').valid();
$('#SaveDashboard').valid();
$('#AutoRefresh').valid();
});
вот мой взгляд
@using (Html.BeginForm("SaveSettings", "Settings", FormMethod.Post, new {id = "saveForm"}))
{
<div id="sevenRightBody">
<div id="mapMenuitemPanel" class="setingsPanelStyle" style="display: block;">
<div class="defaultpanelTitleStyle">Map Settings</div>
Customize the map view upon initial navigation to the map view page.
<p class="setting-p">@Html.LabelFor(x => x.NodeZoomLevel)</p>
<p class="setting-p">@Html.EditorFor(x => x.NodeZoomLevel) @Html.ValidationMessageFor(x => x.NodeZoomLevel)</p>
<p class="setting-p">@Html.LabelFor(x => x.ZoomLevel)</p>
<p class="setting-p">@Html.EditorFor(x => x.ZoomLevel) @Html.ValidationMessageFor(x => x.ZoomLevel)</p>
<p class="setting-p">@Html.LabelFor(x => x.CenterLatitude)</p>
<p class="setting-p">@Html.EditorFor(x => x.CenterLatitude) @Html.ValidationMessageFor(x => x.CenterLatitude)</p>
<p class="setting-p">@Html.LabelFor(x => x.CenterLongitude)</p>
<p class="setting-p">@Html.EditorFor(x => x.CenterLongitude) @Html.ValidationMessageFor(x => x.CenterLongitude)</p>
<p class="setting-p">@Html.LabelFor(x => x.NodeIconSize)</p>
<p class="setting-p">@Html.SliderSelectFor(x => x.NodeIconSize) @Html.ValidationMessageFor(x => x.NodeIconSize)</p>
</div>
и мой Entity
public class UserSetting : IEquatable<UserSetting>
{
[Required(ErrorMessage = "Missing Node Zoom Level.")]
[Range(200, 10000000, ErrorMessage = "Node Zoom Level must be between {1} and {2}.")]
[DefaultValue(100000)]
[Display(Name = "Node Zoom Level")]
public double NodeZoomLevel { get; set; }
[Required(ErrorMessage = "Missing Zoom Level.")]
[Range(200, 10000000, ErrorMessage = "Zoom Level must be between {1} and {2}.")]
[DefaultValue(1000000)]
[Display(Name = "Zoom Level")]
public double ZoomLevel { get; set; }
[Range(-90, 90, ErrorMessage = "Latitude degrees must be between {1} and {2}.")]
[Required(ErrorMessage = "Missing Latitude.")]
[DefaultValue(-200)]
[Display(Name = "Latitude")]
public double CenterLatitude { get; set; }
[Range(-180, 180, ErrorMessage = "Longitude degrees must be between {1} and {2}.")]
[Required(ErrorMessage = "Missing Longitude.")]
[DefaultValue(-200)]
[Display(Name = "Longitude")]
public double CenterLongitude { get; set; }
[Display(Name = "Save Dashboard")]
public bool SaveDashboard { get; set; }
.....
}
Вы можете получить доступ к элементам управления по имени с помощью свойства Form.Controls
, например:
Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox)
Название темы и ваше описание проблемы, похоже, немного отличаются друг от друга.
Чтобы ответить на ваш заголовок (чтобы найти элемент управления по его названию ) используйте следующее:
Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL")
Более подробную информацию об этом методе можно найти здесь здесь .
Чтобы ответить на описание вашей проблемы как (для доступа к элементу управления, созданного кодом после его нажатия) выполните следующие действия:
В цикле, в котором вы создаете элемент управления, добавьте следующий обработчик
Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked
... и тогда это обработает событие click
Private Sub Textbox_Clicked(sender as object, e as RoutedEventArgs)
Dim tbClicked = Ctype(sender, TextBox)
'You can now access any of the properties of the textbox, for example
Dim txt as String = tbClicked.Text
Dim name as String = tbClicked.Name
Dim height as Double = tbClicked.Height
End Sub
Dim sometext As TextBox = CType(Me.Controls("sometext "), TextBox)
Ниже приведен код.
Dim oObj As Object = Me.Controls.Find("control name", True).FirstOrDefault()
Obj.Property = Value
Надеюсь, это поможет.
В качестве быстрого полезного совета обратите внимание, что вам не нужно указывать тип элемента управления в выражении CType для доступа к элементу управления в вашей форме. Я столкнулся с этим при попытке доступа к нескольким типам элементов управления формой, таких как кнопки и текстовые поля, все с одинаковой строкой кода.
CType(Controls("NAME_OF_CONTROL"), Control)
Обратите внимание, что вместо того, чтобы точно определять тип управления, таких как «TextBox» или «Button», вы просто указываете «Control». Это позволяет вам универсально изменять любой тип управления, не указывая его тип.
Я не мог найти его нигде, поэтому я решил поделиться им!