填充模态项目

I am looking to open and populate a Bootstrap modal, based on the row selected from my HTML table and the data I have got from my model, I have a button within my HTML table that will call a JS function and pass the ID to it. I am able to get the data back, but I just don't know how to populate the model with the JSON list.

This is my modal I want to build dynamically:

 <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Change User Deparment</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">×</span>
                </button>
            </div>
            <div class="modal-body">
                <form>
                    <div class="form-group">
                        <label for="Employee Number" class="form-control-label">Employee Number:</label>
                        <input type="text" class="form-control" id="Employee Number">
                    </div>

                    <div class="form-group">
                        <label for="userName" class="form-control-label">User Name:</label>
                        <input type="text" class="form-control" id="userName">
                    </div>

                    <label for="department">Select Department</label>
                    <select class="form-control" id="department">
                        <option>Option1</option>
                        <option>Option2</option>
                        <option>Option3</option>
                    </select>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Send message</button>
            </div>
        </div>
    </div>
</div>

This My JS function, to get my data from my model.

function editUser(id) {

    //alert(userId);

    $.ajax({
        type: "GET",
        url: '@Url.Action("GetUserDetails", "Admin")',
        contentType: "application/json; charset=utf-8",
        datatype: JSON,
        data: ({ 'Value': id }),
        success: function () {



        },
        error: function () {
            alert(test);
        }
    });
}

First, you might want to assign names to your input fields in the form in the modal:

        <div class="modal-body">
            <form>
                <div class="form-group">
                    <label for="Employee Number" class="form-control-label">Employee Number:</label>
                    <input type="text" class="form-control" name="EmployeeNumber" id="Employee Number">
                </div>

                <div class="form-group">
                    <label for="userName" class="form-control-label">User Name:</label>
                    <input type="text" class="form-control" name="UserName" id="userName">
                </div>

                <label for="department">Select Department</label>
                <select class="form-control" id="department">
                    <option>Option1</option>
                    <option>Option2</option>
                    <option>Option3</option>
                </select>
            </form>
        </div>

Then, use jQuery to assign the values based on the names. This may be different based on what your data looks like. Should be something like this:

$.ajax({
    type: "GET",
    url: '@Url.Action("GetUserDetails", "Admin")',
    contentType: "application/json; charset=utf-8",
    datatype: JSON,
    data: ({ 'Value': id }),
    success: function (result) {
        $('#exampleModal form input[name=EmployeeNumber]').val(result.EmployeeNumber);
        $('#exampleModal form input[name=UserName]').val(result.UserName);
    },
    error: function () {
        alert(test);
    }
});

I would like to suggest you to load a view inside your modal content, e.g.:

function editUser(id) {

    //alert(userId);

    var $modal = $("#exampleModal");

    $modal.find('.modal-body').load('@Url.Action("GetUserDetails", "Admin")/' + id, function() {
        $modal.modal('show');
    });
}

And in your controller, you get the model data and return it's view, e.g:

public ActionResult GetUserDetails(long id) {
     UserDetailsViewModel model = GetModel(id); // Get the model somehow
     return PartialView(model);
}

And a view called GetUserDetails, e.g:

@model UserDetailsViewModel
<form>
    <div class="form-group">
        @Html.LabelFor(model => model.EmployeeNumber)
        @Html.EditorFor(model => model.EmployeeNumber, new { @class = "form-control" })
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.UserName)
        @Html.EditorFor(model => model.UserName, new { @class = "form-control" })
    </div>

    <label for="department">Select Department</label>
    <select class="form-control" id="department">
        <option>Option1</option>
        <option>Option2</option>
        <option>Option3</option>
    </select>
</form>

IMO it's the most elegant and clear way to do it.