Skip to content Skip to sidebar Skip to footer

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

3.Result: enter image description here

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