.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"