Использование ajax для обновления полей в представлении на основе раскрывающегося списка с помощью метода в DAL - PullRequest
0 голосов
/ 08 марта 2019

У меня есть представление с выпадающим списком, который создается оператором linq при заполнении представления.

<div class="form-group">
    @Html.LabelFor(m => m.OrderID, "Order ID")
    <div>
        @Html.DropDownListFor(m => m.OrderID, Model.Orders, "Select Order ID", 
        new { @id = "orderDropdown" })
   </div>
</div>

У меня есть 2 других поля в представлении, которые необходимо обновить данными, полученными из базы данных.

<div class="form-group">
        @Html.Label("Final Weight")
        <div id="finalWeight">
            @Html.DisplayFor(m => m.FinalWeight)
        </div>
    </div>
    <div class="form-group">
        @Html.Label("Initial Weight")
        <div id="initialWeight">
            @Html.DisplayFor(m => m.InitialWeight)
        </div>
    </div>

Это ajax, который я получил по ссылке ниже:

<script>
$("#orderDropdown").change(function (event) {
    $.ajax({
        url:"???" + $(this).val(),/* not sure what to use*/
        data: { id: $(this).val()},
        cache: false,
        type: "GET",
        dataType: "html",
        success: function (data, textStatus, XMLHttpRequest) {
            $("#divinitialWeight").html(data);
        }

    });
});

Вот код контроллера

 [HttpGet]
    [OpenAction]
    public async Task<float> GetInitialWeight(int sid)
    {
       var initialWeight = await Manager.FindInitialFilterWeightBySID(sid);

        return  initialWeight.MeanWeight;
    }

Метод находится на уровне доступа к данным, на который ссылаются только в основном проекте. Я бы назвал его в контроллере, как показано ниже, и передал бы orderId:

Entities.Manager.FindInitialWeight(orderId);
Entities.Manager.FindFinalWeight(orderId);

Я наткнулся на этот SO вопрос , и он близок к тому, что мне нужно, но единственная проблема - url:, потому что метод поиска данных не в моем контроллере ... он находится в доступе к данным слой, который является только ссылкой. Также в качестве параметра передается orderId.

Как я могу вызвать этот метод из ajax и передать его orderId из url: вызова ajax?

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Мне фактически пришлось создать GET метод в моем контроллере, который связывался с DAL с помощью переданного параметра из javascript

[HttpGet]
    [OpenAction]
    public async Task<ActionResult> GetInitialWeight(int sid)
    {
       var initialWeight = await Manager.FindInitialFilterWeightBySID(sid);

        return Json(new { initialWeight.MeanWeight }, JsonRequestBehavior.AllowGet);
    }

Затем изменил javascript как таковой

<script>
$("#sidDropdown").change(function (event) {

    var url = "/Controller/GetInitialWeight/";
    var data = { sid: $(this).val() };
    var dataType = "json";
    $.get(
        url,
        data,
    function (response) {
        $("div#initialWeight").text(response.MeanWeight)
        console.log(response.MeanWeight);
    }, dataType);

});

0 голосов
/ 09 марта 2019

Вы можете вызвать метод контроллера из JQuery следующим образом, если код JQuery находится внутри бритвы

url: '@Url.Action("GetInitialWeight")',
data: { sid: $(this).val()},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...