드롭 다운 선택에서 업데이트되는 총 필드 2 개와 총 수량보다 작거나 같아야하는 수량을 입력하는 필드가 있습니다. 드롭 다운 선택은 ajax 호출을 통해 데이터를 가져옵니다. DOM에서 동적으로 업데이트 된 값은 유효성 검사를 다시 구문 분석해야한다는 것을 알고 있습니다. 그러나 그것은 작동하지 않는 것 같습니다. 다른 모든 유효성 검사는 양식에서 정상적으로 작동합니다. 내가 SO1SO2 코드 언급 한 SO의 비슷한 질문이 시도 :특정 필드가 아약스를 사용하여 업데이트 된 후 범위 유효성 검사를 수행하는 방법
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.PurchaseOrderID, "PurchaseOrderID", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-4">
@Html.DropDownListFor(u => u.PurchaseOrderID, Model.PurchaseOrders, "--Select--")
@Html.ValidationMessageFor(model => model.PurchaseOrderID, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.POTotalQuantity, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-4">
@Html.EditorFor(model => model.POTotalQuantity, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Quantity, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-4">
@Html.EditorFor(model => model.Quantity, new { htmlAttributes = new { @class = "form-control", @type = "number", min = "1", max = Model.POTotalQuantity.ToString() } })
@Html.ValidationMessageFor(model => model.Quantity, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.ExpectedDeliveryDate, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-3">
@Html.EditorFor(model => model.ExpectedDeliveryDate, "{0:dd/mm/yyyy}", new { htmlAttributes = new { @class = "form-control datepicker" } })
@Html.ValidationMessageFor(model => model.ExpectedDeliveryDate, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</div>
</div>
}
컨트롤러 :
public JsonResult PopulatePODetails(int POID)
{
var purchaseOrder = db.PurchaseOrders.Find(POID);
var poTotalQty = db.PurchaseOrderLineItems.Where(p => p.PurchaseOrderID == purchaseOrder.ID).Sum(q => q.Quantity);
// Build an anonymous object
var data = new
{
POTotalQty = poTotalQty
};
return Json(data, JsonRequestBehavior.AllowGet);
}
JS :
$(document).ready(function() {
//Populating PO quantity on PO selection
$('#PurchaseOrderID').change(function() {
if (($(this).val() == "") || ($(this).val() == "0")) {
//need to clear textbox values
$('#POTotalQuantity').val('');
}
else {
var poId = $(this).val();
var url = '@Url.Action("PopulatePODetails", "DeliverySchedules")';
$.getJSON(url, { POID: poId }, function (response) {
$('#POTotalQuantity').val(response.POTotalQty);
$.validator.unobtrusive.parse($(response));
});
}
});
});
모델 :
public class DeliveryScheduleVM
{
public int ID { get; set; }
//omitted other properties
public IEnumerable<SelectListItem> PurchaseOrders { get; set; }
[DisplayName("PO Total Qty")]
public int POTotalQuantity { get; set; }// this is used as the upper limit
[Required]
public int Quantity { get; set; }
}
을
당신이 발리를 다시 분석 할 필요가 없습니다 귀하의 요소가 이미 페이지에 존재하는 (그리고 일을 당신에게 재산을 장식 어쨌든 json 값에 대해서는 아무런 의미가 없다.) –
당신의 기대치가 명확하지 않다. –
@StephenMuecke 양식을 제출할 때 귀하가 통제하는 것은 유효합니다. Quantity 필드의 Range 유효성 검증을 실행하려고하는데 입력 된 최소 수량은 1이고 최대 값은 채워진 POTotalQty 필드의 값이어야합니다 (이 필드는 드롭 다운 선택시 채우기) – user2695433