簡體   English   中英

Ajax將值從視圖傳遞到控制器

[英]Ajax pass values from view to controller

所以我試圖將一些值從我的視圖傳遞給控制器​​,控制器獲取一個列表並返回它。

當我試圖從我的文本框等中獲取值時,它們都是未定義的...不確定我在這里做錯了什么。 非常新的javascript ..

這是js代碼

<script type="text/javascript">
$(document).ready(function () {
    $("#getFreeApartements").on('click', function () {

        var amounta = $('#amounta').val();
        var amountc = $('#amountc').val();
        var amountan = $('#animals').val();
        var arr = $('#arrival').val();
        var dep = $('#departure').val();
        var atype = $('#atype').val();


        $.ajax({
            type: 'GET',
            data: { 'amountp': amounta, 'amountc': amountc, 'amountanimals': amountan, 'arrival': arr, 'departure': dep, 'apartmentType': atype },
            url: '@Url.Action("GetFreeApartements", "Bookings")',
            success: function (result) {
                $('freeAp').html(result);
            }
        });
        alert(amounta); // --> return undefined

    });
});

textboxinput字段

    <div class="form-group">
        @Html.LabelFor(model => model.Adult, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10" id="amountp" name="amountp">
            @Html.EditorFor(model => model.Adult, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Adult, "", new { @class = "text-danger" })
        </div>
    </div>

控制器:

        public ActionResult GetFreeApartements(int ap, int ac, int aa, DateTime arr, DateTime dep, ApartmentType type)
    {
 //do some stuff with received values here...
        var freeApartements = db.Apartments.ToList();
        return Json(freeApartements, JsonRequestBehavior.AllowGet);

    }

我也嘗試過serializeArray沒有任何成功......我在資源管理器控制台中沒有收到任何錯誤..函數被調用,但值為null .. - > undefined應該是錯誤。

有任何想法嗎?

所以現在你遇到了異步調用如何工作的問題。 您的$.ajax行將被執行,然后在此之后,將執行alert行 - 它不會等待您的異步調用在運行alert之前解決(這是異步調用的點)。 你應該做的是檢查success回調中的amounta的值。

我修改了下面的內容,僅包括相關部分來說明這一點。 我還添加了一行來在設置HTML后重新獲取amounta DOM元素的值:

$(document).ready(function () {
    $("#getFreeApartements").on('click', function () {

        var amounta = $('#amounta').val();

        $.ajax({
            type: 'GET',
            data: { ... data },
            url: '@Url.Action("GetFreeApartements", "Bookings")',
            success: function (result) {
                $('freeAp').html(result);
                amounta = $('#amounta').val();
                alert(amounta);
            }
        });

    });
});

您的控制器可能還有其他問題......但上面的示例應該可以解決您將看到的JavaScript問題。

在您的textboxinput代碼中。 嘗試使用editorFor的id。 例如#Adult而不是包裝器#amountp作為你的JavaScript中的id

我希望這個答案對你有幫助

在EditorFor(文本框)中指定id屬性。 使用Ajax中的id評估文本框元素。

@Html.EditorFor(model => model.Adult, new { htmlAttributes = new { id="adultTextBox" @class = "form-control" } })

在上面的例子中,我已經指定id="adultTextBox"在ajax中評估它,如$("#adultTextBox").val()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM