.net Core Mvc - Ajax Post Request With Prefix Binding
I would like to post a request via AJAX to a Controller with a model prefix. I need a prefix as I have two forms on one page with similiar model properties ('asp-for' is generating
Solution 1:
For Asp.Net Core, there are two ways to bind the model, ModelBinding and JsonInputFormatter. For sending request with json, it will use JsonInputFormatter. Bind will not work with JsonInputFormatter.
Here is a working demo like below:
1.View:
@{
ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "ShipmentAddress";
}
@model ShipToAddressViewModel
<formid="formShipmentAddress"><divasp-validation-summary="ModelOnly"class="text-danger"></div><divclass="form-group"><labelasp-for="ID"class="control-label"></label><inputclass="form-control"asp-for="ID"><spanasp-validation-for="ID"class="text-danger"></span></div><divclass="form-group"><labelasp-for="Name"class="control-label"></label><inputclass="form-control"asp-for="Name"><spanasp-validation-for="Name"class="text-danger"></span></div><divclass="form-group"><labelasp-for="Name2"class="control-label"></label><inputclass="form-control"asp-for="Name2"><spanasp-validation-for="Name2"class="text-danger"></span></div><divclass="form-group"><inputtype="submit"value="Create"class="btn btn-primary" /></div></form>
@section Scripts
{
<script>
$("body").on('submit', '#formShipmentAddress', function (e) {
e.preventDefault();
var id = parseInt($("#ShipmentAddress_ID").val());
var name = $("#ShipmentAddress_Name").val();
var name2 = $("#ShipmentAddress_Name2").val();
var data = {
ID: id,
Name: name,
Name2: name2
};
$.ajax({
type: "POST",
url: "/Home/Save",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: (data) => {
success(data);
}
});
});
</script>
}
2.Controller:
publicasync Task<IActionResult> Save([FromBody]ShipToAddressViewModel model)
{
//do your stuff...
}

Post a Comment for ".net Core Mvc - Ajax Post Request With Prefix Binding"