Javascript Ajax将值从视图传递到控制器

Javascript Ajax将值从视图传递到控制器,javascript,ajax,asp.net-mvc,Javascript,Ajax,Asp.net Mvc,所以我试图将一些值从我的视图传递给控制器,控制器得到一个列表并返回它 当我试图从我的文本框等获取值时,它们都是未定义的。。。不知道我到底做错了什么。对javascript来说,这是一个全新的概念 下面是js代码 <script type="text/javascript"> $(document).ready(function () { $("#getFreeApartements").on('click', function () { var amount

所以我试图将一些值从我的视图传递给控制器,控制器得到一个列表并返回它

当我试图从我的文本框等获取值时,它们都是未定义的。。。不知道我到底做错了什么。对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

    });
});
我也尝试了序列化数组,但没有成功。。。 我在explorer控制台中没有收到任何错误。。 函数被调用,但值为空..-->未定义应该是错误


有什么想法吗?

所以现在您对异步调用的工作方式有疑问。您的
$.ajax
行将被执行,然后紧接着,
警报
行将被执行-在运行
警报
之前,它不会等待异步调用解决(这就是异步调用的要点)。您应该做的是检查
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);
            }
        });

    });
});

您的控制器可能有其他问题。。。但是上面的示例应该可以解决您在textboxinput代码中看到的JavaScript问题。

。尝试使用editorFor的id。例如
#成人

而不是包装器
#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()

第一个想法是,您发布
数量
,但在控制器方法中,您称它为
ap
(其他方法也是如此)。如果我回忆正确,它们应该匹配名称您正在传递
amountp
amountc
等作为
data
json中的名称,但是在控制器中没有名为
amountp
amountc
的参数。尝试使它们匹配,即将json更改为
数据:{ap:amounta,
好的。但是仍然没有成功。你说你的函数被调用了。请求是什么样子的?你在控制器中谈论请求?如果是的话..我有一个db语句,它返回免费单元,其中包含一些额外的参数,我从视图中传递。但是只要我没有从t接收到任何东西他认为我认为这在这一点上并不重要?!是的,你是对的!但是我的值仍然没有定义。所以错误应该在脚本中的某个地方?或者输入表单有什么问题吗?我从来没有使用过ASP.NET,但我想在AJAX调用的返回值中有些东西与你期望的不一样。试着调查
结果
是,看看这是否会引导您前进。从您的代码的结构来看,它似乎是JSON,这将使您的
$('freeAp').html(result);
不可能实现您最期望的结果。
$(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);
            }
        });

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