Jquery 验证来自ajax注入元素的数据。需要将新数据绑定到文档,以便验证能够看到它。MVC
我需要验证ajax get注入的表单数据。在添加新表单元素之前,以下表单可以很好地进行验证。我正在使用MVC5,但我相信这会扩展到jQuery的范围 元数据验证类: 这在形式上很好Jquery 验证来自ajax注入元素的数据。需要将新数据绑定到文档,以便验证能够看到它。MVC,jquery,ajax,asp.net-mvc,validation,Jquery,Ajax,Asp.net Mvc,Validation,我需要验证ajax get注入的表单数据。在添加新表单元素之前,以下表单可以很好地进行验证。我正在使用MVC5,但我相信这会扩展到jQuery的范围 元数据验证类: 这在形式上很好 public class Exer_WorkoutMetaData { [Required(ErrorMessage = "Name is required")] public string Name { get; set; } [Required(ErrorMessage = "Descr
public class Exer_WorkoutMetaData
{
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
[Required(ErrorMessage = "Description is optional but testing now")]
public string Description { get; set; }
}
这不起作用,因为我认为我没有将ajax get正确绑定到视图
public partial class Exer_RoutineMetaData
{
[Required(ErrorMessage="Routing Name is Required.")]
public string Name { get; set; }
}
在添加新表单元素之前,以下表单可以很好地进行验证。下面是我使用的主要形式。底部是我调用的脚本,用于获取页面,然后调用函数在提交时验证表单
<div id="AjaxUpdate"></div>
<div id="showFaliure"></div>
@using (Html.BeginForm())
{
@Html.ValidationSummary(false)
<fieldset>
<legend>Workout</legend>
<div>
<table>
<tr style="justify-content:center">
<td>
Workout Name:
</td>
<td>
@Html.TextBoxFor(model => model.Name, new { style = "width:100%" })@*<input type="text" name="Workout.Name" style="width:100%" />*@
@Html.ValidationMessageFor(model => model.Name, "*")
</td>
</tr>
<tr>
<td>
Description:
</td>
<td>
@Html.TextBoxFor(model => model.Description) @*<input type="text" name="Workout.Description" /> *Html.TextBoxFor(x=>x.Exer_Routine[0].Name)*@
</td>
</tr>
<tr>
<td>
Wrokout Notes:
</td>
<td>
@Html.TextAreaFor(x => x.Notes)
</td>
</tr>
</table>
<br />
<div id="RoutineAndSetCounts">
<input type="hidden" name="RoutineCount" value="0" />
<input type="hidden" name="TotalSetCount" value="0" />
</div>
<div id="AddRoutine">Add Routine</div>
<div id="RoutineRows">
</div>
<p>
<input type="submit" value="Create" />
</p>
</div>
</fieldset>
}
<script>
$(document).ready(function ()
{
$("#AddRoutine").click(function () {
var routineCount = routineCount = $('input[name=RoutineCount]').val();
**////////////////////////////////////////////////////////
//Get Data Here - How do I bind this data so that when the form is submitted
//it validates the data that was injected below??
////////////////////////////////////////////////////////**
$.get( '/Default/AddRoutineHTML?RoutineCount=' + routineCount, function(data) {
$('#RoutineRows').append(data);
});
routineCount++;
routineCount = $('input[name=RoutineCount]').val(routineCount);
});
//////////////////////////////////////////////////
// This Function works well on the original data,
//just can't get it to work on the injected data
//////////////////////////////////////////////////
$('form').submit(function (evt) {
evt.preventDefault();
var $form = $(this);
$form.validate();
if ($form.valid()) {
$.ajax({
type: 'post',
url: '/Default/NewWorkout',
data: $('form').serialize(),
success: function () {
alert('form was submitted');
}
});
evt.preventDefault();
}
});
});
</script>
@使用(Html.BeginForm())
{
@Html.ValidationSummary(false)
训练
训练名称:
@Html.TextBoxFor(model=>model.Name,新的{style=“width:100%”)@**@
@Html.ValidationMessageFor(model=>model.Name,“*”)
说明:
@Html.TextBoxFor(model=>model.Description)@**Html.TextBoxFor(x=>x.Exer_例程[0].Name)*@
注释:
@Html.TextAreaFor(x=>x.Notes)
添加例程
}
$(文档).ready(函数()
{
$(“#添加例程”)。单击(函数(){
var routineCount=routineCount=$('input[name=routineCount]')。val();
**////////////////////////////////////////////////////////
//在此处获取数据-如何绑定此数据,以便在提交表单时
//它验证了以下注入的数据??
////////////////////////////////////////////////////////**
$.get('/Default/AddRoutineHTML?RoutineCount='+RoutineCount,函数(数据){
$('#RoutineRows')。追加(数据);
});
常规计数++;
routineCount=$('input[name=routineCount]').val(routineCount);
});
//////////////////////////////////////////////////
//此函数在原始数据上运行良好,
//只是无法让它处理注入的数据
//////////////////////////////////////////////////
$('form')。提交(函数(evt){
evt.preventDefault();
var$form=$(此);
$form.validate();
如果($form.valid()){
$.ajax({
键入:“post”,
url:“/Default/NewWorkout”,
数据:$('form')。序列化(),
成功:函数(){
警报(“表格已提交”);
}
});
evt.preventDefault();
}
});
});
这是加载到主训练页面的/Default/NewWorkout数据。我无法将新添加的数据正确绑定到文档,因此文档验证脚本会看到它:
<table>
<tr style=" justify-content:center">
<td>
Routine Name:
</td>
<td>
@*Html.TextBoxFor(x => x.Exer_Routine.)<input type="text" id="Workout.Exer_Routine[@ViewBag.RC].Name" name="Workout.Exer_Routine[@ViewBag.RC].Name" /> *@
@Html.TextBoxFor(x => x.Exer_RoutineList[Model.RoutineCount].Name)
</td>
</tr>
<tr>
<td>
Description:
</td>
<td>
@Html.TextBoxFor(x => x.Exer_RoutineList[Model.RoutineCount].Description)
</td>
</tr>
<tr>
<td>
Notes:
</td>
<td>
@Html.TextBoxFor(x => x.Exer_RoutineList[Model.RoutineCount].Notes)
</td>
</tr>
</table>
例程名称:
@*Html.TextBoxFor(x=>x.Exer_例程)*@
@Html.TextBoxFor(x=>x.Exer\u RoutineList[Model.RoutineCount].Name)
说明:
@Html.TextBoxFor(x=>x.Exer\u RoutineList[Model.RoutineCount].Description)
笔记:
@Html.TextBoxFor(x=>x.Exer\u RoutineList[Model.RoutineCount].Notes)
您可以通过以下方式重新验证所有元素,包括新元素:
var $form = $("form")
$form.removeData('validator')
.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse($form);
另请参见您可以通过以下方式重新验证所有元素,包括新元素:
var $form = $("form")
$form.removeData('validator')
.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse($form);
另请参见谢谢!工作!向上投票并打分。您是否碰巧知道如何获得验证来单独标记字段(我相信它使用标准css以红色边框并添加错误消息),而不仅仅是摘要验证?摘要验证可以工作,但如果可能的话,还想再进一步。再次感谢!非常感谢。工作!向上投票并打分。您是否碰巧知道如何获得验证来单独标记字段(我相信它使用标准css以红色边框并添加错误消息),而不仅仅是摘要验证?摘要验证可以工作,但如果可能的话,还想再进一步。再次感谢!