The PurchaseOrderNumber is generated by another function and is automatically filled in the relevant field when creating a purchase order. However, if the form submission fails due to validation errors, the PurchaseOrderNumber is removed from the field. When the page is refreshed, a new PurchaseOrderNumber is generated. What could be causing this issue, and how can it be resolved?
<div class="form-group col-md-4">
@Html.LabelFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber)
<input asp-for="PurchaseOrderSingle.PurchaseOrderNumber" class="form-control" value="@ViewData["PONumber"]" readonly="readonly" />
@Html.ValidationMessageFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber, "", new { @class = "text-danger" })
</div>
this is my form purchaseOrder number field.
I update this code with below one
<div class="form-group col-md-4">
@Html.LabelFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber)
<input asp-for="PurchaseOrderSingle.PurchaseOrderNumber" class="form-control" value="@Model.PurchaseOrderSingle.PurchaseOrderNumber" readonly="readonly" />
@Html.ValidationMessageFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber, "", new { @class = "text-danger" })
</div>
below the relevant controller class create page function
ViewData["ShippingMeth"] = new SelectList(shippingMethods, "ShippingMethodId", "ShippingMethodName");
_PurchaseOrderDb.PurchaseOrderSingle = new PurchaseOrder();
ViewData["PONumber"] = await NewOrderNumber(false);
return View();
this is the updated version
ViewData["ShippingMeth"] = new SelectList(shippingMethods, "ShippingMethodId", "ShippingMethodName");
_PurchaseOrderDb.PurchaseOrderSingle = new PurchaseOrder();
var poNumber = await NewOrderNumber(false);
//ViewData["PONumber"] = poNumber;
var model = new PurchaseOrderViewModel
{
PurchaseOrderSingle = new PurchaseOrder
{
PurchaseOrderNumber = poNumber
},
};
return View(model);
In the updated version PurchaseOrderNumber correctly set. but the issue is validation model message not display properly.
Can someone help for this?
-> the PurchaseOrderNumber is removed from the field
Per my understanding, we need to check whether we set value for PurchaseOrderNumber
when the validation failed and return to the Form view.
See my code samples below, when it failed, I need to return view along with the model which is the one submitted from view, so that the order number stay same.
@model WebAppMvc.Controllers.PurchaseOrder
<p>form 2</p>
<form method="post" id="formBody" asp-action="createOrder" asp-controller="Form">
<div class="form-group col-md-4">
@Html.LabelFor(model => model.PurchaseOrderNumber)
<input asp-for="PurchaseOrderNumber" class="form-control" value="@Model.PurchaseOrderNumber" readonly="readonly" />
</div>
<button type="submit">submit</button>
</form>
public IActionResult createOrder() {
var order = new PurchaseOrder { PurchaseOrderNumber = 101};
return View(order);
}
[HttpPost]
public IActionResult createOrder(PurchaseOrder order) {
if (!ModelState.IsValid)
{
return View(order);
}
return RedirectToAction(nameof(Index));
}
public class PurchaseOrder
{
[Required]
[Range(0,100)]
public int PurchaseOrderNumber { get; set; }
}